promise.then
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
} 相关推荐
88254251 2020-11-01
MarukoMa 2020-09-02
88234852 2020-09-15
陈旭阳 2020-08-31
whynotgonow 2020-08-19
前端开发Kingcean 2020-07-30
whynotgonow 2020-07-29
bowean 2020-07-08
前端开发Kingcean 2020-07-08
88520191 2020-07-05
前端开发Kingcean 2020-06-27
88481456 2020-06-18
whynotgonow 2020-06-16
88520191 2020-06-13
88520191 2020-06-13
89500297 2020-06-13