gpt4 book ai didi

javascript - 异步递归函数结束后的回调

转载 作者:可可西里 更新时间:2023-11-01 01:16:54 24 4
gpt4 key购买 nike

下面的函数递归地打印文件夹中的 Chrome 书签。在处理完最终的递归循环后,如何更改以下函数以调用另一个函数? chrome.bookmarks.getChildren() 是异步的,这使得很难知道函数何时处理完所有内容。

谢谢。

    for (var i = 0; i < foldersArray.length; i++) {
// The loop makes several calls with different folder IDs.
printBookmarks(foldersArray[i]);
}

// I'd like any code here to be run only after the above has
//finished processing

function printBookmarks(id) {
chrome.bookmarks.getChildren(id, function(children) {
children.forEach(function(bookmark) {
console.debug(bookmark.title);
printBookmarks(bookmark.id);
});
});
}

编辑:抱歉,我认为我在最初的代码示例中没有说清楚。我更新了代码,通过多次调用该函数来显示我在使用异步函数时遇到的问题。我希望 printBookmarks 函数调用后的任何代码都等待所有 printBookmarks 函数完成处理。

最佳答案

您的异步方法实例可能都在一次执行,并且您事先不知道会有多少。因此,您必须保持计数,然后在最后一个异步方法完成时使用回调。

for (var i = 0; i < foldersArray.length; i++) {
// The loop makes several calls with different folder IDs.
printBookmarks(foldersArray[i], thingsToDoAfter);
}

function thingsToDoAfter() {
// I'd like any code here to be run only after the above has
// finished processing.
}

var count = 0;

function printBookmarks(id, callback) {
count++;
chrome.bookmarks.getChildren(id, function(children) {
children.forEach(function(bookmark) {
console.debug(bookmark.title);
printBookmarks(bookmark.id, callback);
});
count--;
if (count === 0 && callback)
callback();
});
}

关于javascript - 异步递归函数结束后的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5048861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com