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
原文地址:https://www.cnblogs.com/sunupo/p/15793426.html