承诺迭代链接数组,使用mercury-client解析它们并将解析后的内容推送到新数组中

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数组的第一个索引,我没有任何问题.

Aln*_*tak 6

在你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)