在这个超时的例子中,使用promise.resolve来观察和记录正常的promise的结果,但不破坏原有的promise。
Promise.observe = function(pr, cb) {
pr.then((res) => {
Promise.resolve(res).then(cb)
}, (err) => {
Promise.resolve(err).then(cb)
})
return pr
}
const req = (t) => new Promise((resolve, reject) => {
const to = setTimeout(() => {
clearInterval(ts)
reject('超时')
}, t);
const ts = setTimeout(() => {
clearTimeout(to)
resolve('正常')
}, 500)
})
// 超时
// 第一个是正常,第二个是超时
let ary = [req(300),Promise.observe(req(1000), function(r) {
console.log('观察')
console.log(r)
})]
async function test2() {
let res
res = await Promise.race(ary)
console.log(res)
}
test2().catch(e=>{
console.log(e)
}).finally(()=> {
console.log('记录超时')
})