如何在vo.js循环中产生多重承诺?

基于这个例子 – vo / examples / 9-pipeline-composition.js ,我将如何return yield for this 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循环中做返回时,循环会中断并返回结果,循环将不会前进。 您可以在处理结果的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 }