使用chrome apis在javascript中调用嵌套回调函数

时间:2011-12-20 15:30:10

标签: javascript function asynchronous google-chrome-extension

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});
        }
     });
   });
});

基本上我试图在当前窗口中获取所有打开的选项卡,然后创建一个书签文件夹并添加所有选项卡。它以前工作得很好,突然它停止工作。已创建根文件夹书签,但链接未添加到文件夹中。

我知道很多嵌套调用是异步的,但我如何确保所有这些调用都执行。

2 个答案:

答案 0 :(得分:0)

在我看来,当你引用它时,bmNode为null。

我会同步创建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});
        }
     });
   });

答案 1 :(得分:0)

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