javascript - 在Promise.all中使用Resolve返回可迭代

标签 javascript promise nightmare

我不仅要返回此Promise的结果,还要返回被调用的可迭代的urlurls是一个网址数组。

function findMainLink(urls) {
  return Promise.all(urls.map((url) => {
  var result = nightmare
    .goto(url)
    .wait('#main')
    .evaluate(function() {
       return document.querySelector('#main a').href;
    });

    nightmare.end()
    return result
  }
}

vo(findMainLink)([
 'https://yahoo.com',
 'https://google.com'
])
.then(res => console.log(res))
.catch(e => console.error(e))

当我执行return {result,url}时,它无法解析,但会给我发回Promise的当前状态。如何在结果中包含网址?

最佳答案

你想要的是

function findMainLink(urls) {
  return Promise.all(urls.map((url) => {
    var result = nightmare
      .goto(url)
      .wait('#main')
      .evaluate(function() {
         return document.querySelector('#main a').href;
      });

    nightmare.end();
    return result;
  })
    .then(results => results.map((result, i) => ({result, url[i]}));
}

将元组数组传递给Promise.all当然是行不通的,因为元组不是一个 promise ,而且Promise.all无法知道应该在tuple内部查看。相反,上面的代码等待所有promise解析,然后将结果映射为您提供的元组数组(并为此返回一个promise)。

关于javascript - 在Promise.all中使用Resolve返回可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38230663/

相关文章:

javascript - D3 - 如何在文本选择中获取前一个元素的宽度

javascript - 为什么将Nightmarejs与async/await一起使用时,我的 promise 为何无法解决?

node.js - 如何在 Promise 中返回响应给客户端?

javascript - Firebase:Query.on 失败:使用 1 个参数调用。预计至少 2

node.js - 我想在运行nightmare.js之后获取gig中的所有数据,但是我一直没有定义gig

javascript - Gatsby 在页面刷新时丢失/消失的 CSS?

javascript 自动滚动双向

javascript - 使用 “load more”按钮JS抓取

javascript - JQuery 使用其他元素激活悬停状态

javascript - Nightmare JS返回页面状态码