zoukankan      html  css  js  c++  java
  • 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     })
  • 相关阅读:
    Activity的活动Menu和上下文Menu使用示例
    drawable之scale and rotate代码示例
    密度无关和缩放比例无关定义
    [前端优化]使用Combres合并对js、css文件的请求
    不同版本的SQL Server之间数据导出导入的方法及性能比较
    SqlBulkCopy加了事务真的会变快吗?
    ASP.NET Web Forms 4.5的新特性(二):针对HTML5的更新和Unobtrusive Validation
    MVC3缓存之一:使用页面缓存
    MVC3缓存之三:MVC3中的局部缓存(Partial Page)
    ASP.NET Web Forms 4.5的新特性(三):Model Binding
  • 原文地址:https://www.cnblogs.com/dangdanghepingping/p/14348692.html
Copyright © 2011-2022 走看看