JavaScript “Promise.resolve”与“new Promise”构造函数中的不同错误处理
在JavaScript中,有两种创建promise的方式:使用Promise.resolve方法或使用new Promise构造函数。虽然这两种方式都能实现相同的结果,但它们处理错误的方式不同。
Promise.resolve: Promise.resolve方法接收一个值,并返回一个以此值解决的promise。如果该值是一个promise,返回的promise将采用该promise的状态。如果该值是一个thenable对象(即具有.then方法),返回的promise将采用thenable对象的状态。
如果传入Promise.resolve的值不是一个promise或thenable对象,返回的promise将使用该值进行解决。
当你不确定值是不是一个promise,或者想要确保返回的promise总是被解决时,通常会使用Promise.resolve。
要使用Promise.resolve处理错误,可以将一个函数作为第二个参数传入。如果promise被拒绝,该函数将被调用。
示例: 下面是使用Promise.resolve和错误处理的完整工作代码:
Javascript
Promise.resolve('value').then(function (value) {
console.log("Resolved")
}).catch(function (error) {
console.log("Error")
});
输出结果:
Resolved
新的Promise: new Promise构造函数接受一个函数作为参数。该函数带有两个参数:resolve和reject。resolve函数用于解决承诺并返回一个值,reject函数用于拒绝承诺并返回一个错误。
如果想使用new Promise构造函数处理错误,只需要传入reject函数即可,resolve函数是可选的。
示例: 下面是使用new Promise构造函数处理错误的完整工作代码:
Javascript
new Promise(function (resolve, reject) {
var a = 1
if (a == 2) {
resolve('value');
} else {
reject('error');
}
}).catch(function (error) {
console.log("Error is resolved")
});
输出:
Error is resolved
虽然Promise.resolve和new Promise构造函数都可以实现同样的结果,但它们处理错误的方式不同。Promise.resolve始终会返回一个已被解析的promise,即使传入的值是一个被拒绝的promise。而new Promise构造函数只有在调用reject函数时才会返回一个被拒绝的promise。
如果不确定值是否是promise,或者想确保返回的promise总是被解析,可使用Promise.resolve。如果想通过new Promise构造函数处理错误,只需传入reject函数。
极客教程