美文网首页web开发编程学习笔记
【promise-06】promise.resolve与prom

【promise-06】promise.resolve与prom

作者: 飞蝗tengda | 来源:发表于2018-12-18 16:13 被阅读1次

    #Promise.resolve()和promise.reject()

    常用来生成已经被决议为失败或者成功的promise实例

    Promise.resolve

    Promise.resolve 接收参数的时候有三种情况

    1. 传递一个普通的值
      比如一个字符串,一个数字。
    //以下两种方式是完全等价的
    let p1 = new Promise(resolve => {
       resolve('成功!');
     });
    
    let p2 = Promise.resolve('成功!');
    
    1. 传递一个promise实例
    //构建一个promise实例
    let poruomiesi = new Promise(resolve => {
      resolve('耶!')
    });
    
    // 直接返回传递进去的promise
    //这里是直接把poruomiesi实例返回给了p
    let p = Promise.resolve(poruomiesi);
    //data为传递过来的‘耶’
    p.then(data => void console.log(data));
    
    console.log(p === poruomiesi); //true
    
    1. 传递一个thenable (具有then方法的对象)
    let obj = {
      then(cb) {
        console.log('我被执行了');
        cb('哼!');
      },
      oth() {
        console.log('我被抛弃了');
      }
    }
    
    // 立即执行then方法,这里的then方法调用的是obj的then方法
    //如果这里then传递一个回调,就会成为obj的then方法中的参数cb
    Promise.resolve(obj).then(data => {
      console.log(data);
    });
    

    promise.reject

    promise.reject要简单一些,不管什么传递什么值,只要决议为失败,就把这个值传递过来。

    Promise.reject({ then() { console.log(1) } })
      .then(() => {
        console.log('我不会被执行');
      }, e => {
        console.log(e);
      });
    

    把同步的任务转成异步任务

    console.log(1);
    
    let p = new Promise(resolve => {
      console.log(2);
      resolve(); //异步执行
      console.log(3);
    });
    
    console.log(4);
    
    p.then(() => {
      console.log(5);
    });
    
    console.log(6);
    

    因为异步任务一定是在同步任务执行之后,所以以上代码的结果为:1,2,3,4,6,5

    function createAsyncTask(syncTask) {
      return Promise.resolve(syncTask).then(syncTask => syncTask());
    }
    
    createAsyncTask(() => {
      console.log('我变成了异步任务!!!');
      return 1 + 1;
    }).then(res => {
      console.log(res);
    });
    
    console.log('我是同步任务!');
    

    相关文章

      网友评论

        本文标题:【promise-06】promise.resolve与prom

        本文链接:https://www.haomeiwen.com/subject/fqylkqtx.html