Promise.resolve
Promise.resolve() 方法返回一个 Promise 对象,该对象的状态为 fulfilled(已成功),并将指定的值作为 Promise 对象 settled 后的结果。 settled结果指的是:在 Promise 中,settled 指的是 Promise 对象的状态已经确定,即已经变成了 fulfilled(已成功)或 rejected(已失败)状态。
Promise 对象 settled 后的结果指的是 Promise 对象 settled 后的返回值,即在 Promise 对象 settled 后,通过 then() 方法或 catch() 方法获取到的值。如果 Promise 对象 settled 后是 fulfilled(已成功)状态,那么通过 then() 方法获取到的值就是 Promise 对象 settled 后的结果;如果 Promise 对象 settled 后是 rejected(已失败)状态,那么通过 catch() 方法获取到的值就是 Promise 对象 settled 后的结果。
针对promise.resolve,Promise.resolve() 方法返回一个 Promise 对象,该对象的状态为 fulfilled(已成功),并将指定的值作为 Promise 对象 settled 后的结果。如果传入的值是一个 Promise 对象,Promise.resolve() 方法会直接返回这个 Promise 对象。如果传入的值是一个 thenable 对象(即具有 then() 方法的对象),Promise.resolve() 方法会将这个对象转换为 Promise 对象,并立即执行 then() 方法。如果 Promise.resolve() 方法不传入任何参数,返回的 Promise 对象会立即 settled,但是不会有任何结果。
Promise.resolve('data').then(result => {
console.log(result); // 输出 'data'
});
const promise = Promise.resolve('data');
promise.then(result => {
console.log(result); // 输出 'data'
});
const thenable = {
then(resolve, reject) {
resolve('data');
}
};
Promise.resolve(thenable).then(result => {
console.log(result); // 输出 'data'
});
Promise.resolve().then(() => {
console.log('Promise resolved');
});
Promise.then
Promise 的 then() 方法用于注册 Promise 对象 settled 后的回调函数,当 Promise 对象 settled 后,then() 方法会被调用,接收 settled 后的结果作为参数,并返回一个新的 Promise 对象。 then() 方法接收两个参数,第一个参数是 Promise 对象 settled 后的回调函数,第二个参数是可选的,用于处理 Promise 对象 rejected 后的回调函数。 then() 方法返回的新的 Promise 对象的状态和值根据 Promise 对象 settled 后的回调函数的返回值而定:
- 如果 Promise 对象 settled 后的回调函数返回一个值,新的 Promise 对象的状态为 fulfilled(已成功),并将返回值作为 settled 后的结果。
- 如果 Promise 对象 settled 后的回调函数抛出一个异常,新的 Promise 对象的状态为 rejected(已失败),并将抛出的异常作为 settled 后的结果。
- 如果 Promise 对象 settled 后的回调函数返回一个 Promise 对象,新的 Promise 对象的状态和值将根据返回的 Promise 对象而定。
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('data');
}, 1000);
});
promise.then(result => {
console.log(result); // 输出 'data'
return 'new data';
}).then(result => {
console.log(result); // 输出 'new data'
throw new Error('error');
}).catch(error => {
console.error(error); // 输出 Error('error')
});