![](/img/trans.png)
[英]How does one catch errors with setAttributeNS() in javascript?
[英]javascript catch multiple errors with one catch
假设我有 3 个带承诺的功能:
function1().then(() => {
function2().then(() => {
function3().then(() => {
})
})
}).catch((err) => {
console.log(err);
})
我能捕捉到 3 个函数中的任何一个返回的错误吗? 如果不是,我应该怎么做才能用一个语句捕获任何函数的承诺返回的错误?
与其在正文中调用和链接它们,不如返回生成的 promise 并链接.then
子句。
function1().then(() => {
// TODO: Something.
return function2();
}).then(() => { // <-- This `.then` waits until `function2` has finished executing
// TODO: Something.
return function3();
}).then(() => { // <-- This `.then` waits until `function3` has finished executing
// TODO: Something.
}).catch((err) => {
console.log(err);
});
您可以使用 async/await 或then
不使用嵌套:
function1().then(() => Promise.resolve(val1))
.then(() => Promise.resolve(val2))
...
}).catch((err) => {
console.log(err);
});
使用异步/等待:
try {
await function1();
await function2();
...
} catch(err) {
console.log(error);
}
最简单的更改是只return
内部承诺。 这将导致他们的拒绝向上传播到单个.catch()
,如下所示:
function1().then(() => {
return function2().then(() => {
return function3().then(() => {
})
})
}).catch((err) => {
console.log(err);
})
但是,这种连续嵌套的 Promise 并不理想(有些人会称之为反模式)。 如果您现在真的想要对事物进行排序并且您正在使用现代 JS 环境,那么您可以使用await
对事物进行排序并在一个地方捕获错误:
async someFunction() {
try {
let val1 = await function1();
let val2 = await function2();
let val3 = await function3();
} catch(e) {
// catch any rejections from the above three `await` statements here
console.log(e);
}
}
使用await
还可以更轻松地查看代码流并从一个 scope 中的多个异步调用收集结果。
如果没有await
,您还可以展平原始代码:
function1().then(() => {
return function2().then(() => {
})
}).then(() => {
return function3().then(() => {
})
}).catch((err) => {
console.log(err);
})
但是,大多数人会认为await
实现更简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.