• 7.JavaScript-Promise的并行和串行


    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
    // 最后执行
  • 相关阅读:
    vue项目中使用mockjs模拟接口返回数据
    Node.js:Express 框架
    Node.js:Web模块、文件系统
    Node.js:get/post请求、全局对象、工具模块
    Node.js:常用工具、路由
    echarts使用记录(二)legend翻页,事件,数据集,设置y轴最大/小值,让series图形从右侧出往左移动
    Node.js:模块系统、函数
    ElementUI表单验证使用
    高级程序员职责
    Git:fatal: The remote end hung up unexpectedly
  • 原文地址:https://www.cnblogs.com/xiaole9924/p/11842180.html
Copyright © 2020-2023  润新知