图形遍历与承诺

时间:2016-01-21 16:57:14

标签: javascript node.js promise bluebird

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

让我们考虑广度优先搜索,我们获得根节点,每个节点都有一个对其子节点的引用。我们需要获取根节点的子节点并将它们排入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之前完成。

我想问题的核心是如何使用promises创建动态while循环?

1 个答案:

答案 0 :(得分:1)

如何将代码包装在函数中并递归调用它?

{'modID1': OrderedDict([('sequences2', {'header2': 5}), ('sequences1', {'header1': 3}), ('sequences3', {'header3': 1})]), 'modID2': OrderedDict([('sequences2', {'header2': 8}), ('sequences1', {'header1': 1})])}