如何使用 vo.js 在 for 循环中产生多个承诺?
How to yield multiple promises in for loop with vo.js?
基于此示例 - vo/examples/9-pipeline-composition.js,我如何 return yield
为这个 for 循环的每次迭代提供承诺?
目前循环运行一次并产生一个承诺。
function * get (urls) {
for (var i = urls.length - 1; i >= 0; i--) {
console.log(urls[i])
return yield http.get(urls[i])
}
}
function status (res, params) {
return res.status
}
let scrape = vo(get(['http://standupjack.com', 'https://google.com']), status)
vo([ scrape ])
.then(out => console.log('out', out))
.catch(e => console.error(e))
当您在 for 循环中执行 return 时,循环中断并且 return 返回结果并且循环不会继续前进。您可以在 for 循环内调用一个函数来处理结果,而不是 return 它。
function * get (urls) {
for (var i = urls.length - 1; i >= 0; i--) {
console.log(urls[i])
let result = yield http.get(urls[i])
yield handleResult(result)
}
}
或者您可以将每个结果放入一个数组中,然后 return 最后将所有结果放在一起
function * get (urls) {
let resArr = []
for (var i = urls.length - 1; i >= 0; i--) {
console.log(urls[i])
let result = yield http.get(urls[i])
resArr.push(result)
}
return resArr
}
基于此示例 - vo/examples/9-pipeline-composition.js,我如何 return yield
为这个 for 循环的每次迭代提供承诺?
目前循环运行一次并产生一个承诺。
function * get (urls) {
for (var i = urls.length - 1; i >= 0; i--) {
console.log(urls[i])
return yield http.get(urls[i])
}
}
function status (res, params) {
return res.status
}
let scrape = vo(get(['http://standupjack.com', 'https://google.com']), status)
vo([ scrape ])
.then(out => console.log('out', out))
.catch(e => console.error(e))
当您在 for 循环中执行 return 时,循环中断并且 return 返回结果并且循环不会继续前进。您可以在 for 循环内调用一个函数来处理结果,而不是 return 它。
function * get (urls) {
for (var i = urls.length - 1; i >= 0; i--) {
console.log(urls[i])
let result = yield http.get(urls[i])
yield handleResult(result)
}
}
或者您可以将每个结果放入一个数组中,然后 return 最后将所有结果放在一起
function * get (urls) {
let resArr = []
for (var i = urls.length - 1; i >= 0; i--) {
console.log(urls[i])
let result = yield http.get(urls[i])
resArr.push(result)
}
return resArr
}