Chrome.webstore.install调用两个回调?为什么
chrome.webstore.install calling both callbacks? Why?
我正在尝试使用chrome.webstore.install( link, success, fail)
函数内联加载谷歌Chrome扩展。
这是我的网页<head>
节中的链接。
<link rel="chrome-webstore-item"
href="https://chrome.google.com/webstore/detail/oafp--redacted--ffencd" />
按钮在这儿。
<input type="button" class="btn btn-default" onclick="getExtension();">Go</input>
这是Javascript,它出现在关闭</body>
标签之前。
<script type="text/javascript">
function getExtension() {
function extensionFailed(reason) {
console.log("extension Install Failed:", reason);
}
function extensionInstalled() {
console.log("installed");
};
console.log("calling install");
chrome.webstore.install(undefined, extensionInstalled(), extensionFailed());
console.log("install returned");
};
</script>
单击调用getExtension的按钮,我就得到了这个事件序列,一个接一个地立即传递。
- "调用install"(在调用
chrome.webstore.install()
之前) - "installed"(成功回调)
- "扩展安装失败,未定义"(失败回调)
- "安装回来了。"(呼叫
chrome.webstore.install()
返回后)
在中间的某个地方,异步地,我得到内联安装弹出并接受它。
我想…
- 失败回调应该只在失败时调用。
- 故障原因应该是有意义的东西,而不是
undefined
。 成功回调应该延迟到用户接受安装。
我一定是做错了什么. ...
答案:
在这行代码中:
chrome.webstore.install(undefined, extensionInstalled(), extensionFailed());
实际上是通过在extensionInstalled()
和extensionFailed()
中拥有()
来执行函数。如果你想把它们作为回调函数传入,你可以像传入var
:
chrome.webstore.install(undefined, extensionInstalled, extensionFailed);
函数作为变量:
注意:这不适用于您的代码,因为您在调用它们之前定义了函数,这是良好的实践。
你也可以将变量定义为函数,在我看来这只会让事情变得更加混乱。例如,这两个函数定义:
var myfunctionVar = function() {
console.log('hello, world');
}
function myfunction() {
console.log('hello, world');
}
您将以正常方式调用这些函数(即myfunctionVar()
和myfunction()
)。
这两个定义之间的关键区别是myfunctionVar
只有在定义本身被执行后才可用,而myfunction
在定义它的父函数范围内立即可用(或者一旦脚本文件被执行,如果没有父函数)。这是由于"提升",这只会使事情变得更加复杂。
在这个例子中,你不能在分配myfunctionVar()
之前调用它。但是,调用myfunction()
不会出现这种情况,您可以在父函数的任何地方调用它。
更多信息请看答案
函数在Javascript中比在其他语言中更复杂(也更强大!),所以希望这个答案能为你澄清一些事情。
- 如何创建多个回调
- 如何处理在javascript中访问数据结构的两个回调
- 具有一个响应的多个回调-Node JS
- gapi.signIn 调用多个回调
- 避免打字稿中 AJAX 获取的多个回调的优雅方法
- 从多个回调 javaScript 返回最终对象
- j查询多个回调到一个回调计数调用
- 由双管道分隔的两个回调
- 执行多个具有多个回调的 php 脚本
- 根据多个回调结果的结果执行最终回调
- 组合多个回调的任何更好方法
- 我怎样才能让 sinon 屈服于多个回调
- Javascript 从多个回调返回值
- JavaScript 等待几个回调完成
- 查找何时完成多个回调时的编程模型
- Javascript 多个回调
- 如何将具有两个回调的函数调用转换为promise
- 函数内的两个回调函数未同步调用
- 如何链接同一对象的两个回调类型增益函数
- Chrome.webstore.install调用两个回调?为什么