var currentURL;
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
currentURL = tabs[0].url;
chrome.tabs.remove(tabs[0].id);
console.log(currentURL);
});
console.log(currentURL);
上面的代码应该将当前页面的URL分配给变量“ currentURL”,但是,函数内部的控制台日志记录正确的值,而函数外部的控制台日志记录“ undefined”。
我无法弄清楚为什么在函数外未定义“ currentURL”的值,将不胜感激!
答案 0 :(得分:1)
回调是异步的,这就是为什么您不能依赖外部console.log的原因。外部日志发生在仍在事件队列中等待的异步回调之前。在发生外部日志之后,将处理回调,因此您仅可以成功在该回调内部记录tabs值。
有关更多信息,请参阅此文档: http://developer.chrome.com/extensions/overview.html#sync-example
答案 1 :(得分:1)
false
false
true
false
方法是异步的。因此,运行最后一行时尚未定义chrome.tabs.query()
的值。
查看异步/等待功能应有助于您对程序进行编码,以等待回调解决后再继续处理。
答案 2 :(得分:0)
var currentURL; // executed first
chrome.tabs.query({ active: true, currentWindow: true }// executed second
, function (tabs) { // -> executed fourth
currentURL = tabs[0].url;
chrome.tabs.remove(tabs[0].id);
console.log(currentURL);
});
console.log(currentURL);// executed third
请注意chrome.tabs.query
中的函数是一个回调。这意味着它将在您在外部编写的控制台日志之后启动。这就是为什么console.log
中的值仍未定义