在Promise中同步产生的错误,用catch捕获就可以了,如下所示:
getHttpData() {
return new Promise((resolve, reject) => {
let obj = {
status: 200,
};
if (obj.abc.status === 200) {
resolve(200);
} else {
reject(404);
}
});
},
test() {
this.getHttpData()
.then((res) => {
console.log("liubbc res: ", res);
})
.catch((err) => {
console.log("liubbc err: ", err);
});
},
在obj.abc.status这里会出现引用错误,因为是同步错误,可以被catch捕获。我们在看下,在Promise中异步产生的错误能否被catch捕获?代码如下:
getHttpData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
let obj = {
status: 200,
};
if (obj.abc.status === 200) {
resolve(200);
} else {
reject(404);
}
}, 2000);
});
},
test() {
this.getHttpData()
.then((res) => {
console.log("liubbc res: ", res);
})
.catch((err) => {
console.log("liubbc err: ", err);
});
},
大家可以执行一下,catch并没有捕获到引用错误。原因就是错误是异步的,catch捕获不到。
怎么让catch能捕获到呢?用对异步代码加try catch ,然后把错误reject出去,这样就可以捕获到异步代码里面的错误了。代码如下:
getHttpData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
let obj = {
status: 200,
};
if (obj.abc.status === 200) {
resolve(200);
} else {
reject(404);
}
} catch (error) {
reject(error);
}
}, 2000);
});
},
test() {
this.getHttpData()
.then((res) => {
console.log("liubbc res: ", res);
})
.catch((err) => {
console.log("liubbc err: ", err);
});
当然也可以写成async await 形式,代码如下:
getHttpData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
let obj = {
status: 200,
};
if (obj.abc.status === 200) {
resolve(200);
} else {
reject(404);
}
} catch (error) {
reject(error);
}
}, 2000);
});
},
async test2() {
try {
const res = await this.getHttpData();
console.log("liubbc test2 res: ", res);
} catch (error) {
console.log("liubbc test2 err: ", error);
}
},