有没有办法将承诺返回给.catch和.then

时间:2016-07-19 05:46:27

标签: javascript node.js

基本上我想运行相同的代码,无论代码是否抛出错误。现在我这样做了:

.then((resp) => {
    assert(false);
}, err => {
    assert.equal(2, err.error.errors.length);
    });
});

但我想做这样的事情:

.something((resp, err) => {
    assert.equal(400, resp.statusCode)
    assert.equal(2, err.error.errors.length);
}

1 个答案:

答案 0 :(得分:3)

可以这样做......

...只需使用catch并从中返回一些内容,然后在promise then上使用.catch返回:

thePromise
    .catch(err => err)
    .then(resultOrError => {
        // Your code
    });

你的then回调收到的论点(上面的resultOrError)将是解决的价值,如果承诺得到解决,或被拒绝的价值(松散地,"错误")如果它被拒绝了。如果你想区分它们,你可以自然地在catch中做更多的事情。

示例(运行几次,你会看到它得到解决,也被拒绝):



let p = new Promise((resolve, reject) => {
  setTimeout(() => {
    if (Math.random() < 0.5) {
      resolve("success");
    } else {
      reject("error");
    }
  }, 0);
});
p.catch(err => err).then(resultOrError => {
  console.log("Got this:", resultOrError);
});
&#13;
&#13;
&#13;

...但是交替

...在使用已解析的值或被拒绝的值之后,您可以在回调调用中使用一个共同的函数:

function doSomethingNoMatterWhat() {
    // ...
}

thePromise
    .then(result => {
        // Presumably use `result`, then:
        doSomethingNoMatterWhat();
    })
    .catch(error => {
        // Presumably use `error`, then:
        doSomethingNoMatterWhat();
    });