• es6 promise


    1. 小明一件接着一件的做任务,干完一件才能做下一件任务;  任务如下: cost 表示用的时间, 单位ms, name表示任务名字. 用promise实现过程;

    var arr = [{cost: 300, name: "任务A" },{cost: 400, name: "任务B" },{cost: 300, name: "任务c" },{cost: 500, name: "任务d" }]
     
    var arr = [{cost: 300, name: "任务A" },{cost: 400, name: "任务B" },{cost: 300, name: "任务c" },{cost: 500, name: "任务d" }]
       
       function doJob(job){
         return new Promise((res,rej)=>{
           setTimeout(()=> {
            console.log(job.name + "干完了...");
            res( job.cost ); //这是将then中的回调推到微任务队列
           },job.cost)
         })
       }
       let p = null;
       for(let i = 0; i < arr.length; i++){
        //  第一次和其他的不一样, 得单独拿出来
         if(i == 0){
          p = doJob(arr[i]); //结果返回promise类型的对象
         }
         else{
           p = p.then(()=> doJob(arr[i])); //promise.then里的函数返回值, 也是一个promise类型的对象
         }
       }

    2 如果小明同时做所有的任务

    注意: all中的回调函数的参数, 顺序是按照promise的属性, 而不是按照谁先干完的顺序;

     1 var arr = [{ cost: 1000, name: "任务A" }, { cost: 400, name: "任务B" }, { cost: 300, name: "任务c" }, { cost: 500, name: "任务d" }]
     2 
     3     function doJob(job) {
     4       return new Promise((res, rej) => {
     5         setTimeout(() => {
     6           console.log(job.name + "干完了...");
     7           res(job.cost);
     8         }, job.cost)
     9       })
    10     }
    11 
    12     var jobs = [];
    13     for (let i = 0; i < arr.length; i++) {
    14       jobs.push(doJob(arr[i]));
    15     }
    16     Promise.all(jobs).then(res => {
    17       console.log("所有任务都做完了", res);//res是7行的参数组成的数组[1000, 400, 300, 500]
    18 })

    3. 小明最先做完的任务:

    注意: race可以测出谁最先做完, 但是不妨碍后面的任务继续做.

     1     var arr = [{ cost: 1000, name: "任务A" }, { cost: 400, name: "任务B" }, { cost: 300, name: "任务c" }, { cost: 500, name: "任务d" }]
     2 
     3     function doJob(job) {
     4       return new Promise((res, rej) => {
     5         setTimeout(() => {
     6           console.log(job.name + "干完了...");
     7           res(job.name);
     8         }, job.cost)
     9       })
    10     }
    11 
    12     var jobs = [];
    13     for (let i = 0; i < arr.length; i++) {
    14       jobs.push(doJob(arr[i]));
    15     }
    16 
    17     Promise.race(jobs).then(res => {
    18       console.log("有做完的了", res);
    19     })
  • 相关阅读:
    数据结构的入门
    Google 插件
    树莓派的第一次
    MySQL下载与安装
    SVN图标不显示问题
    excel 批量生成SQL语句
    版本管理工具
    RSA加密、解密、签名、验签的原理及方法
    获取客户端内网IP
    eclipse 添加svn插件
  • 原文地址:https://www.cnblogs.com/dangdanghepingping/p/14348692.html
Copyright © 2020-2023  润新知