结合Chrome异步api

Combining Chrome async APIs

本文关键字:api 异步 Chrome 结合      更新时间:2023-09-26

我需要在循环中组合两个Chrome api,循环完成后,保存数组到存储。
这是我的

chrome.downloads.search({}, function (DownloadItem) {
    for (var i=0; i<DownloadItem.length; i++) {
        var itemID = DownloadItem[i].id;
        chrome.downloads.getFileIcon(itemID, function(iconURL) {
            DL_icons[itemID] = iconURL;
        });     
    }
    console.log(DL_icons);
});  
search

结果为对象的DownloadItem数组。我需要循环遍历它,获取ID,对于每个ID,我需要将其传递给chrome.downloads.getFileIcon的调用。
getFileIcon方法的结果是iconURL,我需要在ID索引上推入新的数组(我可以将其存储到具有相应ID的新对象中,然后将其推入数组,在这种情况下无关紧要)。

一切完成后,我需要将其存储到本地存储(或console.log…)。现在,我为每个数组元素获得相同的ID和iconURL。
基本上,我需要做一个适当的内部API闭包,只是不能使它正确。有人能帮帮忙吗?

如果有人遇到类似的问题,这就是我如何解决它,感谢@ elclars的建议

它来自于这个答案

chrome.downloads.search({}, function (DownloadItem) {
    for (var i=0; i<DownloadItem.length; i++) {
        var itemID = DownloadItem[i].id;
        (function(index) {
            chrome.downloads.getFileIcon(index, function(iconURL) {
                DL_icons[index] = iconURL;
                console.log(DL_icons);
            });
        })(itemID);         
    }
});

没有传递循环索引,而是传递了ID变量…工作完成了