能够保证尽快处理结果,而不是等待所有的承诺

我正在使用KOA2演示一个大pipe道。 我想在准备就绪时尽快输出结果,而不是等到所有结果都准备好(然后输出全部)。

我坚持下面的代码:( get_usersget_posts返回一个承诺)

 async (ctx, next) => { ctx.res.write("<html><body>...") let data = await Promise.all( [res_fetch.get_users(), res_fetch.get_posts()] ) ctx.res.write(data[0]) ctx.res.write(data[1]) ctx.res.write("</body></html>") ctx.res.end() 

}

理想情况下,应该是这样的:(我不知道如何实现)

 let data = await Promise.oneFinished( [res_fetch.get_users(), res_fetch.get_posts()] ) if (data[0] is finished) ctx.res.write(data[0]) else if (data[1] is finished) ctx.res.write(data[1]) 

  let data = await Promise.all([ res_fetch.get_users().then(result => { ctx.res.write(result) }), res_fetch.get_posts().then(result => { ctx.res.write(result) }), ]) ctx.res.write("</body></html>") ctx.res.end() 

你正在寻找的是Promise.race ,它返回从集合中提供的承诺,首先解决(或拒绝)!

 let data = await Promise.race( [res_fetch.get_users(), res_fetch.get_posts()] ) if (data[0] is finished) ctx.res.write(data[0]) else if (data[1] is finished) ctx.res.write(data[1])