2011-12-20 134 views
1
chrome.bookmarks.create({parentId: nodeId, title: title},function(bmNode) { 
    chrome.windows.getCurrent(function(window) { 
    chrome.tabs.getAllInWindow(window.id, function(tabs) { 
     for(var i=0; i<tabs.length; i++) { 
      chrome.bookmarks.create({parentId: bmNode.id, title:tabs[i].title, 
            url:tabs[i].url}); 
     } 
    }); 
    }); 
}); 

基本上我试图在当前窗口中获取所有打开的选项卡,然后创建书签文件夹并将所有选项卡添加到它。它过去一直很好地工作,突然停止工作。根文件夹书签已创建,但链接未添加到该文件夹​​。在javascript中使用chrome apis调用嵌套回调函数

我知道它的很多嵌套调用是异步的,但我如何确保它们都执行。

+0

开发人员工具检查人员是否在您的扩展程序页面中显示任何错误? – 2011-12-20 16:29:25

+0

可悲的是,我没有得到任何错误。它曾经工作,直到前一段时间。但随后开始独立行事。 – intoTHEwild 2011-12-20 16:42:07

+0

缺少的左括号是故意的吗? (你永远不会关闭'chrome.bookmarks.create','chrome.windows.getCurrent'和'chrome.tabs.getAllInWindow'调用中的左括号) – 2011-12-20 18:00:11

回答

0

这是我忽略的一件小事。我发现我正在调用“location.reload()”函数,这会扰乱整个异步回调结构。我删除了它,现在开始工作正常。

0

在您引用它时,我认为bmNode为空。

我会同步创建bmNode,然后去枚举选项卡。

var bmNode = chrome.bookmarks.create({parentId: nodeId, title: title}) 

    chrome.windows.getCurrent(function(window) { 
    chrome.tabs.getAllInWindow(window.id, function(tabs) { 
     for(var i=0; i<tabs.length; i++) { 
      chrome.bookmarks.create({parentId: bmNode.id, title:tabs[i].title, 
            url:tabs[i].url}); 
     } 
    }); 
    });