能够保证尽快处理结果,而不是等待所有的承诺
我正在使用KOA2演示一个大pipe道。 我想在准备就绪时尽快输出结果,而不是等到所有结果都准备好(然后输出全部)。
我坚持下面的代码:( get_users
或get_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])