Return 可在 Promise.all 中使用 Resolve 进行迭代
Return iterable with Resolve in Promise.all
我想 return 不仅是这个 Promise 的结果,还有它被调用的可迭代对象 url
。 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}
时,它并没有解决,而是返回了 promise 的当前状态。如何在结果中包含 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;
})
.then(results => results.map((result, i) => ({result, url[i]}));
}
将元组数组传递给 Promise.all
当然是行不通的,因为元组不是一个 promise 并且 Promise.all
无法知道它应该在 tuple
.取而代之的是,上面的代码等待所有的承诺解决,然后映射结果给你你的元组数组(和 returns 一个承诺)。
我想 return 不仅是这个 Promise 的结果,还有它被调用的可迭代对象 url
。 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}
时,它并没有解决,而是返回了 promise 的当前状态。如何在结果中包含 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;
})
.then(results => results.map((result, i) => ({result, url[i]}));
}
将元组数组传递给 Promise.all
当然是行不通的,因为元组不是一个 promise 并且 Promise.all
无法知道它应该在 tuple
.取而代之的是,上面的代码等待所有的承诺解决,然后映射结果给你你的元组数组(和 returns 一个承诺)。