欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

7.JavaScript-Promise的并行和串行

程序员文章站 2023-02-06 20:29:15
Promise 并行 Promise.all是所有的Promise执行完毕后(reject|resolve)返回一个Promise对象。 最近在开发一个项目中,需要等接口拿到全部数据后刷新页面,取消loding效果 1 // 项目中请求接口 2 function getShowProject(res ......

promise 并行

promise.all是所有的promise执行完毕后(reject|resolve)返回一个promise对象。

最近在开发一个项目中,需要等接口拿到全部数据后刷新页面,取消loding效果

 1  // 项目中请求接口
 2 function getshowproject(resolve, reject) {
 3     $.ajax({
 4       url: `${api}/rrz/member/showprojectbyid`,
 5       type: 'get',
 6       data: { appid: appid },
 7       success: function (res) {
 8         if (res.result == 'success') {
 9           gather['listby'] = res.data;
10           resolve();
11         }
12       }
13     });
14   }
15   function getprojectpic(resolve, reject) {
16    ...
17   }
18   function projectrelation(resolve, reject) {
19    ...
20   }
21   function queryprojectdynamics(resolve, reject) {
22    ...
23   }
24   function showprojectlovevalue(resolve, reject) {
25    ...
26   }
27   function getappprojectdonorcomment(resolve, reject) {
28    ...
29   }
30   // 等待接口全部请求完成后  刷新页面
31   var a1 = new promise(getshowproject);
32   var a2 = new promise(getprojectpic);
33   var a3 = new promise(projectrelation);
34   var a4 = new promise(queryprojectdynamics);
35   var a5 = new promise(showprojectlovevalue);
36   var a6 = new promise(getappprojectdonorcomment);
37   promise.all([a1, a2, a2, a3, a4, a5, a6]).then(function () {
38     info = { data: gather }
39     getdetail();
40     console.log('loading效果图消失');
41   })

 

promise 串行

在项目的实际操作中会用到串行调用方法的情况,实现异步执行,例如
有三个方法,方法一、方法二、方法三,需要执行完方法一之后执行方法二,执行完方法二之后执行方法三,可以用promise实现,简单的模拟做法如下:

function one(){
    console.log(11111);
}

function two(){
    console.log(22222);
}

function three(){
    console.log(33333);
}
function fivep(func){
    return new promise(function(resolve, reject) {
        func();
        resolve();
    });
}

p.then(fivep(one))
.then(fivep(three))
.then(fivep(two))
.then(function(result) {
    console.log('最后执行' + result);
});
// 执行结果 
// 1111
// 3333
// 2222
// 最后执行