【发布时间】:2016-03-15 21:13:21
【问题描述】:
我有一个这样的字典:
{go: ['went', 'run'], love: ['passion', 'like']}
键的值是它的同义词。 'getSynonymWords(word)' 是一个异步函数,它返回一个 promise,其中它的值是与传递的参数对应的同义词列表。如何遍历对象以递归方式获取另一个对象,如下所示:
{went: [], run: [], passion: [], like: []}
这是我的一段代码:
function getRelatedWords(dict) {
return new Promise(function(resolve) {
var newDict = {};
for(var key in dict){
if (dict.hasOwnProperty(key)) {
var synonyms = dict[key];
Promise.map(synonyms, function (synonym) {
return getSynonymWords(synonym).then(function (synonyms) {
newDict[synonym] = synonyms;
return newDict;
});
}).then(function () {
resolve(newDict);
});
}
}
});
}
这是不正确的,因为有些任务没有完成,但我不知道如何运行与承诺并行嵌套的任务。我正在使用蓝鸟库。你能帮帮我吗?
【问题讨论】:
-
javascript 是单线程的——所以没有
parallel -
也许它是 bluebird 的一部分,我不知道,但 Promise.map 不是 vanilla JS 中的函数。
-
@BrandonNozakiMiller - 蓝鸟有很多糖
-
@JaromandaX 谢谢,我会避免这个。
-
看起来你需要对
Promise.map的结果做点什么。将其添加到数组中,然后在for循环完成后返回Promise.all(arrayOfPromiseMapResults)。这也将否定您对new Promise的需求,这有点像an anti-pattern
标签: javascript node.js asynchronous promise bluebird