Javascript 承诺链接无法按预期工作。进入 catch 块后仍然抛出错误

问题描述 投票:0回答:1

我尝试用 3 个简单的 Promise 在 Javascript 中实现 Promise 链。我正在解决第一个承诺,最后两个我正在拒绝。直到第二次拒绝为止,它工作正常。但是在 catch 语句之后,它再次为第三个承诺抛出错误。我只想使用一个 catch 块。

var promise1 = new Promise((resolve, reject) => resolve("1st resolved"));
var promise2 = new Promise((resolve, reject) => reject("2nd rejected"));
var promise3 = new Promise((resolve, reject) => reject("3rd rejected"));

// promise chaining
promise1
  .then((res) => {
    console.log(res);
    return promise2;
  })
  .then((res) => {
    console.log(res);
    return promise3;
  })
  .then((res) => {
    console.log(res);
  })
  .catch((err) => console.log("error in promise", err));

我也附上了错误 请参阅此错误 - (https://i.sstatic.net/pQ9wE5fg.png)

javascript asynchronous ecmascript-6 promise es6-promise
1个回答
1
投票

代码中的许多内容都是语法错误的。

1-您正在声明一个变量:

var promise1 = new Promise((reso..

而不是声明一个函数:
const promise1 =()=> new Promise((reso..


function promise1(){ return new Promise((re....}

2- 在你的代码中

promise1
是一个变量而不是函数,
所以当你使用函数时,语法是
[函数妈妈] +
(
+ [...参数] +
)
.
请注意 openclose 括号。

3-

then
语法很特殊,它接受 2 个函数:第一个用于解析,第二个用于拒绝。

正确的编码方式:

const 
  promise1 =_=> new Promise((resolve, reject) => resolve("1st resolved"))
, promise2 =_=> new Promise((resolve, reject) => reject("2nd rejected"))
, promise3 =_=> new Promise((resolve, reject) => reject("3rd rejected"))
  ;

// promise chaining
promise1()
.then
  ( res => { console.log('res1', res) ; return promise2(); }
  , rej => { console.log('rej1', rej) ; return promise2(); }
  )
.then
  ( res => { console.log('res2', res) ; return promise3(); }
  , rej => { console.log('rej2', rej) ; return promise3(); }
  )
.then
  ( res => { console.log('res3', res); }
  , rej => { console.log('rej3', rej); }
  )
.catch((err) => console.log("error in promise", err));

© www.soinside.com 2019 - 2024. All rights reserved.