使用promise.resolve()的then捕获异步结果
// Promise.any的实现
const req = (t, res) => new Promise((resolve, reject) => {
setTimeout(() => {
console.log('req end ' + t)
if(res) {
resolve(t)
} else {
reject(false)
}
}, t)
})
let ary = [req(1000, 1),req(100, 1),req(300, 1)]
Promise.first = function(prs) {
return new Promise((resolve) => {
prs.forEach(function(pr){
// 立即执行每个pr,等待异步操作返回,哪个异步先有结果整个流程就resolve.
Promise.resolve(pr).then(resolve).catch(e=>{})
})
})
}
async function test() {
let res
res = await Promise.first(ary) // 取一个成功就行,其他的不要。||
console.log(res)
}
test().catch(e=>{})