2011-12-20 104 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}); 
     } 
    }); 
    });