gam*_*ofe 1 javascript loops promise adonis.js
我有一个链接数组,我想使用它解析其内容mercury-client,并将结果推送到一个articles数组.
* parseLinks() {
const links = yield this.getInboxMessages() // It will be ['link1', 'link2', ..., 'linkN']
const articles = []
return new Promise((resolve, reject) => {
for (let link of links) {
mercury.parse(link).then((data) => {
articles.push(data)
})
}
resolve(articles)
})
}
Run Code Online (Sandbox Code Playgroud)
我没有看到什么是错的,因为我得到了[].我试图移动Promise到内部for..of,但结果保持不变.
通过删除循环并使其仅解析links数组的第一个索引,我没有任何问题.
在你articles被填满之前你太早解决了.
您可以用以下方法替换整个return块:
return Promise.all(links.map(link => mercury.parse(link)));
Run Code Online (Sandbox Code Playgroud)
只有在处理完每个链接后才会返回已解决的承诺.
如果(并且仅当)mercury.parse函数可以处理作为裸函数引用mercury传递而不需要将其作为this上下文变量传递,则可以进一步简化:
return Promise.all(links.map(mercury.parse));
Run Code Online (Sandbox Code Playgroud)