gpt4 book ai didi

javascript - 带 promise 的图遍历

转载 作者:行者123 更新时间:2023-12-03 07:52:56 25 4
gpt4 key购买 nike

我想知道如何使用 Promise 编写图形遍历算法(我使用的是 JavaScript/Bluebird)。每个 Node 的定义都在数据库中,获取每个 Node 是异步的。

让我们考虑一个广度优先搜索,其中我们得到根 Node ,并且每个 Node 都有对其子 Node 的引用。我们需要获取根 Node 的子 Node 并将它们排入 nodesToVisit 队列,依此类推。

考虑以下代码:

var Promise = require('bluebird');

var nodesToVisit = [{id:1, children:[2,3]}]; // 1 is the root

Promise.each(nodesToVisit, val => {
console.log(val.id);
if(val.children) {
val.children.forEach(child => {
var getChildFromDatabasePromise = myDatabase.get(child);
nodesToVisit.push(getChildFromDatabasePromise);
});
}
});

这不起作用,因为 Promise.each 将在将 getChildFromDatabasePromise 推送到它之前完成。

我想问题的核心是如何使用promise来制作动态的while循环?

最佳答案

将代码包装在函数中并递归调用它怎么样?

var nodesToVisit = [{id:1, children:[2,3]}]; // 1 is the root

visitNextBatch();

function visitNextBatch() {
var copyOfNodes = nodesToVisit;
nodesToVisit = [];
Promise.each(copyOfNodes, val => {
console.log(val.id);
if(val.children) {
val.children.forEach(child => {
var getChildFromDatabasePromise = myDatabase.get(child);
nodesToVisit.push(getChildFromDatabasePromise);
});
}
}).then(function() {
visitNextBatch();
})
}

关于javascript - 带 promise 的图遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34929748/

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