猿问

如何使用Promise完成以下需求

f2和f3依赖于f1的结果,f4依赖于f2和f3的结果,f6依赖于f3和f4和f5的结果?

怎么写效率最高?


    f1 

  /    \

f2      f3      f5

  \    / \     /

    f4    \   /

       \   \ / 

          f6


30秒到达战场
浏览 466回答 4
4回答

忽然笑

f1().then(data1 => promise.all([f2(data1), f3(data1)]))    .then(([data2, data3]) => promsie.all([f4({ data2, data3 }), f5()])    .then(([data4, data5]) => f6({ data3, data4, data5 })))    .then(data6 => console.log('结束'))

至尊宝的传说

            let temp = f1().then(data1 => {                return Promise.all([f2(), f3()])            }).then(([data2, data3]) => {                return Promise.all([f4(), Promise.resolve(data3)])            })            Promise.all([temp, f5()]).then(([[data4, data3], data5]) => {                console.log(data4, data3, data5)                return f6()            }).catch(error=>{                console.log(error)            })

长风秋雁

f5没有依赖,所以f5执行的越早越有利,尤其是f5响应时间>f4的时候// 模拟下请求const timeConsumingFunc = param=>new Promise(  (resolve) => {    let timeout = Math.random() * 5000;    console.log(`task ${param} will be resolved in ${timeout}ms`);    setTimeout(() => {      console.log(`${param} resolved`);      resolve(param+10);    }, timeout);  });console.time('totalTime2');Promise.all([(()=>{  return timeConsumingFunc(1).then(res1 => {    console.log(`f1 get response: ${res1}`);    return Promise.all([timeConsumingFunc(2),timeConsumingFunc(3)]);  }).then(([res2,res3])=>{    console.log(`f2 get response: ${res2}`);    console.log(`f3 get response: ${res3}`);    return timeConsumingFunc(4);  });})(),timeConsumingFunc(5)]).then(([res4,res5])=>{  console.log(`f4 get response: ${res4}`);  console.log(`f5 get response: ${res5}`);  return timeConsumingFunc(6);}).then(res6=>{  console.log(`f6 get response: ${res6}`);  console.timeEnd('totalTime2');});最终时间大致=MAX{(f1 + MAX(f2,f3) + f4), f5} + f6
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答