javascript – Nodejs与promise平行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Nodejs与promise平行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1735字,纯文字阅读大概需要3分钟。
内容图文
我有这样的字典:
{go:[‘去’,’跑’],爱:[‘激情’,’喜欢’]}
密钥的值是其同义词. ‘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);
});
}
}
});
}
这是不正确的,因为有些任务没有完成,但我不知道如何运行与promises嵌套的任务.我正在使用Bluebird库.你可以帮帮我吗?
解决方法:
首先,避免明确的建设.现在我们已经完成了 – 我们可以通过首先获取所有单词,然后获取所有同义词,然后将它们折叠回字典,而不使用嵌套和4行代码.
function getRelatedWords(dict) {
// first we get all the synonyms
var synonyms = Object.keys(dict).map(x => dict[x]).reduce((p, c) => p.concat(c), []);
// second we get all the synonyms for each word with the word itself
var withSynonyms = Promise.map(synonyms, s => Promise.all([s, getSynonymWords(s)]));
// then we fold it back to an object with Promise.reduce
var asDict = withSynonyms.reduce((p, c) => p[c[0]] = c[1]), {});
// and return it
return asDict;
}
如果我们想要“聪明”,我们可以选择一个班轮,我将在这里使用ES2016来获得乐趣:
let {entries} = Object;
let {reduce, all} = Promise;
const getRelatedWords = dict => reduce(entries(dict), (p, c) => p.concat(c), []).map(s => [s, getSynonymWords(s)]).map(all).reduce((p, [s, syns]) => p[s] = syns, {});
更好的解决方案btw可能是使用像wordnet这样的东西,让你指定距离,并进行一次调用.
内容总结
以上是互联网集市为您收集整理的javascript – Nodejs与promise平行全部内容,希望文章能够帮你解决javascript – Nodejs与promise平行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。