实现一个有依赖关系的 Promise all
Published on October 26, 2024Updated on November 3, 2024
Loading content...
TypeScript// 模拟一个降级异步接口 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()