доступ к внешним данным из функции обратного вызова - PullRequest
1 голос
/ 05 апреля 2011

У меня проблемы с доступом к узлам [i] из функции обратного вызова внутри chrome.bookmarks.create . Есть идеи, ребята? Я думаю, что это из-за закрытия. Есть ли способ заставить его работать?

function copyBookmarks(nodes,folderId){            

    for(i=0;i<nodes.length;i++){

        var properties={
            parentId:folderId,
            index:nodes[i].index,
            title:nodes[i].title,
            url:nodes[i].url
        };   

        chrome.bookmarks.create(properties,function(newNode){              

          console.log(nodes[i]);//this doesnt work

        });                    
    }
}

1 Ответ

3 голосов
/ 05 апреля 2011

Это просто доступ к nodes, но проблема в том, что i будет значением после завершения цикла. Обычное решение - сделать копию i в каждой итерации с помощью самовыполняющейся функции:

for (var i = 0; i < nodes.length; i++) {

    // Other code...

    // Self executing function to copy i as a local argument
    (function (i) {
        chrome.bookmarks.create(properties, function (newNode) {
            console.log(nodes[i]);
        });
    })(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...