今天看到一个中间件,中使用了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