function testPromise(id) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
if (typeof id === 'number') {
resolve(id);
} else {
reject('error');
}
}, 500);
}
);
}
async function test(){
try{
testPromise(10)
for(let i=0 ; i<10000; i++){
....
}
.
.
}catch(err){
console.log(err)
}
}
test();
好吧考虑上面的代码我想异步运行testPromise函数所以如果我使用await语法testPromise(10)
先运行然后运行循环代码,如果,我不使用await,testPromise(10)
异步运行和一切但是,如果testPromise遇到错误,我应该如何处理呢?有没有办法使用async-await结构并在try-catch结构中处理这个错误?
我知道我可以使用catch函数testPromise(10).catch(err =>{});
来处理错误,但我想知道有没有办法在我的第一级try-catch中处理它
答案 0 :(得分:3)
你不能。
您可以使用try-catch
和await
,也可以在承诺上使用catch
。
您应该考虑到即使您的函数(test
)已经完成执行,也可能抛出错误。
请参阅@ Bergi的答案以获得正确的例子。
答案 1 :(得分:2)
如果你想与你的循环同时运行它并正确处理来自的错误(这必然包括等待两者),那么Promise.all
是你唯一的选择:
async function test() {
try {
await Promise.all([
testPromise(10),
(async function() {
for (let i=0; i<10000; i++) {
…
}
…
}())
]);
} catch(err) {
console.log(err);
}
}