我有最新的Chrome,我正在构建扩展程序。
请考虑以下代码:
var returnTab = false; // init the variable as false
var createNewTab = function(){
returnTab = false; // make sure we start with this var as false
chrome.tabs.create({url:'http://www.google.com/'}, function(tab){
returnTab = tab; // put the returntab object inside the variable
});
while(returntab===false){ }; // wait for the tab to be created.
return returnTab;
};
c = createNewTab();
一切都很好,它应该工作;除了没有。 createNewTab()函数陷入无限循环,变量returnTab永远不会获得回调返回值。 如果我按照我的意思去做,没有等待循环一切正常,回调函数就会以它应该的方式执行。
LE:看起来回调函数等待循环完成。有没有人知道在回调函数启动之前保持整个函数忙的方法?
答案 0 :(得分:1)
在这里猜测,因为我没有实际操作Chrome扩展程序的经验,但也许while()循环占用了线程,并且从未真正允许您在create()调用中指定的回调运行。如果你在常规网站上这样做会发生这种情况。
尝试将setTimeout()调用添加到等待循环中,这样,在等待时,它不使用任何CPU,而不是使用100%...我不知道你怎么能这样做在您的扩展环境中,您展示的代码并没有足够的上下文。
但是,如果我这样做,而不是循环和等待,我只需在回调函数中创建选项卡后添加您想要做的任何事情(在您设置returnTab的地方)。这是在JS中做事的正常方式......