promise.then返回的是一个新的promise对象
1、如果then()方法中抛出了一个异常,那么返回的Promise将会变成拒绝状态,value是异常的reason,如下例。
new Promise((resolve, reject) => { if (true) { resolve(); } else { reject(); }}).then((data) => { resolve();}, (error) => { reject();})then返回的promise: { [[promiseStatus]]: 'rejected', [[promiseValue]]: 'ReferenceError: resolve is not defined at Promise.then'}
为什么返回的是这个呢?
是因为resolve是undefined,把它当做一个函数去调用当然会报错,所以就算没有return任何东西,此时的then返回的promise是rejected。而且,一般不能在Promise.then()中调用resolve和reject,除非你这样写:new Promise((resolve, reject) => { if (true) { resolve(resolve); // 将resolve传递下去 } else { reject(); }}).then((data) => { data(); // data接收了resolve函数})
2、如果then()方法中return【普通】参数值,那么返回的Promise将会变成resolved,value即是return的那个数据,如下例。
var promise2 = new Promise(function(resolve, reject) { setTimeout(function() { resolve('success'); }, 2000);});promise2.then(function(data) { return 2})then返回的promise: { [[PromiseStatus]]: "resolved" [[PromiseValue]]: 2}
3、如果then()方法中return Promise,那这个Promise是什么状态,then返回的就是什么状态,如下例。
var promise2 = new Promise(function(resolve, reject) { setTimeout(function() { resolve('success'); }, 2000);});promise2.then(function(data) { return new Promise(function(resolve, reject) { // 注意一定要写return,否则就属于第4种情况了 reject('把状态置为rejected error'); }); })then返回的promise: { [[PromiseStatus]]: "rejected" [[PromiseValue]]: "把状态置为rejected error"}
4、如果then方法中没有return 任何东西,那么返回的Promise就是接收状态,value是undefined,如下例。
new Promise((resolve, reject) => { if (true) { resolve(); } else { reject(); }}).then(() => { console.log('resolve')})then返回的promise: { [[promiseStatus]]: 'resolved', [[promiseValue]]: undefined}