zoukankan      html  css  js  c++  java
  • Promise.resolve 的使用

    今天看到一个中间件,中使用了Promise.resolve,在这里做一下总结:

    /**
     * 使你除了 action 之外还可以发起 promise。
     * 如果这个 promise 被 resolved,他的结果将被作为 action 发起。
     * 这个 promise 会被 `dispatch` 返回,因此调用者可以处理 rejection。
     */
    const vanillaPromise = store => next => action => {
      if (typeof action.then !== 'function') {
        return next(action)
      }
    
      return Promise.resolve(action).then(store.dispatch)
    }
    Promise.resolve共有四种参数
    第一种:不带任何参数
    setTimeout(function () {
      console.log('three');
    }, 0);
    
    Promise.resolve().then(function () {
      console.log('two');
    });
    
    console.log('one');
    // one two three

    相当于一个resolve状态的promise对象

    第二种:普通变量或者普通对象
    const p = Promise.resolve('Hello');
    
    p.then(function (s){
      console.log(s)
    });
    // Hello

    相当于resolve状态的promise对象

    第三种:参数是一个 Promise 实例

    如果参数是 Promise 实例,那么Promise.resolve将不做任何修改、原封不动地返回这个实例。

    第四种:参数是一个thenable对象

    thenable对象指的是具有then方法的对象,比如下面这个对象
    let thenable = {
      then: function(resolve, reject) {
        resolve(42);
      }
    };
    
    Promise.resolve方法会将这个对象转为 Promise 对象,然后就立即执行thenable对象的then方法。
    let thenable = {
      then: function(resolve, reject) {
        resolve(42);
      }
    };
    
    let p1 = Promise.resolve(thenable);
    p1.then(function(value) {
      console.log(value);  // 42
    });
    
    thenable对象的then方法执行后,对象p1的状态就变为resolved,从而立即执行最后那个then方法指定的回调函数,输出 42

    来源链接:https://www.jianshu.com/p/96080498b4ea
  • 相关阅读:
    FreeSWITCH一些需求应对
    CentOS 7安装Mysql并设置开机自启动
    RTP学习笔记
    SDP学习笔记
    Quartz实用二三事
    Quartz:ERROR threw an unhandled Exception
    CentOS 7一些常用配置
    Java获取音频文件(MP3)的播放时长
    使用Callable和Future接口创建线程
    join() 方法详解及应用场景
  • 原文地址:https://www.cnblogs.com/sunupo/p/15793426.html
Copyright © 2011-2022 走看看