-3

我不仅想返回这个 Promise 的结果,还想返回url它被调用的可迭代对象 the 。urls是一个 url 数组。

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},它不会解决,而是让我返回承诺的当前状态。我如何在结果中包含 url?

4

1 回答 1

2

你想要的是

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.all也无法知道它应该在tuple. 相反,上面的代码会等待所有的 Promise 解决,然后将结果映射为您的元组数组(并为此返回一个 Promise)。

于 2016-07-06T18:29:20.520 回答