1

基于这个例子 - 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))
4

1 回答 1

1

当你在 for 循环中执行 return 时,循环中断并返回结果,循环不会向前移动。您可以在 for 循环中调用一个函数来处理结果而不返回它。

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)
  }
}

Orelse 你可以将每个结果推送到一个数组中,然后在最后一起返回所有结果

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
}
于 2017-04-19T06:20:27.870 回答