Mhm*_*z_A 2 javascript promise
这是问题的简化版本;
有一些承诺,很少的.then()链和一个.catch()用于错误处理的块;每个承诺可能会解决或拒绝,因此我Promise.allSetted曾经根据它们的数组顺序和状态来知道哪个承诺失败了;当所有承诺都解决时它工作正常,但当承诺被拒绝时,它的状态将显示为“已完成” Promise.allSetteld;如果我删除该.catch()块,它将按预期工作,但我们需要保留该.catch()块以登录到商店;那么为什么它不像预期的那样表现呢?有没有办法让它显示“被拒绝”的状态.catch()?
let a = Promise.resolve("a: Promise.resolved").then(response => response).catch(err=>console.log(err));
let b = Promise.reject("b: Promise.rejected").then(response => response); // no error handling
let e = Promise.reject("e: Promise.rejected").then(response => response).catch(err=>console.log(err));
Promise.allSettled([a,b,e]).then( values => console.log(values) );Run Code Online (Sandbox Code Playgroud)
你可以从块中抛出错误catch,这样错误就不会在catch:
let a = Promise.resolve("a: Promise.resolved").then(response => response).catch(err => console.log(err));
let b = Promise.reject("b: Promise.rejected").then(response => response); // no error handling
let e = Promise.reject("e: Promise.rejected").then(response => response).catch(err => {
console.log(err);
throw err;
//or Reject the Promise
//return Promise.reject(err)
});
Promise.allSettled([a, b, e]).then(values => console.log(values));Run Code Online (Sandbox Code Playgroud)
这也在 Mozilla文档中讨论:
p.catch(onRejected);
onRejected一个
Function在调用时Promise被拒绝。这个函数有一个参数:
reason拒绝原因。catch()如果onRejected抛出错误或返回Promise本身被拒绝的a ,则返回的 Promise被拒绝;否则,它已解决。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |