首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google Chrome扩展中的变量值不一致

Google Chrome扩展中的变量值不一致
EN

Stack Overflow用户
提问于 2011-03-07 06:43:04
回答 2查看 918关注 0票数 0

我正在为Chrome编写一个扩展,基本上就是使用书签。以下代码在popup html文件中,bookmarkHelper()函数在body onload事件中被调用。它应该检查名为"TestFolder“的书签文件夹是否存在。如果存在,它会删除文件夹中的所有书签。如果没有,它会创建一个空文件夹。

代码语言:javascript
复制
var rootFolder = undefined;
function bookmarkHelper() {
    // Create TestFolder folder if it doesn't exist
    chrome.bookmarks.getTree(function(tree) {
        otherFolder = tree[0].children[1].children;
        rootFolder = undefined;
        for(i=0; i<otherFolder.length; i++) {
            if(otherFolder[i].title == "TestFolder") {
                rootFolder = otherFolder[i];
                return;
            }
        }
        chrome.bookmarks.create({'parentId': "2",
                         'title': 'TestFolder'},
                        function(newFolder) {} );
    });

    // Remove all bookmarks from the rootFolder
    for (i=0; i<rootFolder.children.length; i++)
        chrome.bookmarks.remove(rootFolder.children[i].id);
}

现在我的问题是,当文件夹中有书签时,它不会删除它们。但如果我将最后3行改为

代码语言:javascript
复制
setTimeout(function(){
    for (i=0; i<rootFolder.children.length; i++)
        chrome.bookmarks.remove(rootFolder.children[i].id);
}, 100);

它会删除书签。在另一种情况下,当我检查弹出窗口时,它会使用原始代码删除书签。这很奇怪,我也不知道是怎么回事。我是不是遗漏了一些匿名函数线程类型的概念?因为AFAIK,JS是单线程的。

EN

Stack Overflow用户

发布于 2011-03-07 08:28:24

正确地说,JavaScript是单线程的,但是它经常使用“回调”,当一个特定的函数完成它的工作时就会运行回调,同时允许下面的代码行继续运行。

您传递给chrome.bookmarks.getTree()的函数不会立即执行;相反,它会在chrome.bookmarks.getTree完成其工作后运行,然后传递结果。同时,没有等待,所以下面的代码会立即执行。

将最后三行移动到传递给chrome.bookmarks.getTree的函数中,您可能会得到一些更合理的结果。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5214002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档