Last updated on
实现一个有依赖关系的 Promise all
// 模拟一个降级异步接口
const isDegrade = (isDegrade) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(isDegrade)
}, 1000)
})
}
const requestA = async () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('requestA')
}, 2000)
})
}
const main = async () => {
console.time('main')
const degrade = await isDegrade(false)
if (degrade) {
return
}
const res = await requestA()
console.log(res)
console.timeEnd('main')
}
// 实现一个有依赖关系的 Promise all
const main2 = async () => {
console.time('main2')
const degradePromise = new Promise((resolve) => {
isDegrade(true).then(resolve, () => resolve(false))
})
const requestAPromise = requestA()
const res = await new Promise((resolve) => {
degradePromise.then((res) => {
// 如果要降级
if (res) {
resolve(null)
}
})
requestAPromise.then(async (res) => {
await degradePromise
resolve(res)
})
})
if (!res) {
return
}
console.log(res)
console.timeEnd('main2')
}
// main()
// main2()
const buildMainInvokeWithDegrade = (degradePromise: Promise<any>, requestAPromise: Promise<any>) => {
const finalDegradePromise = new Promise((resolve) => {
degradePromise.then(resolve, () => resolve(false))
})
return new Promise((resolve) => {
finalDegradePromise.then((res) => {
// 如果要降级
if (res) {
resolve(null)
}
})
requestAPromise.then(async (res) => {
await finalDegradePromise
resolve(res)
})
})
}
const main3 = async () => {
console.time('main3')
const res = await buildMainInvokeWithDegrade(isDegrade(true), requestA())
console.log(res)
console.timeEnd('main3')
}
main3()