如何在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 }