基本上我想运行相同的代码,无论代码是否抛出错误。现在我这样做了:
.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);
}
答案 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;
...在使用已解析的值或被拒绝的值之后,您可以在回调调用中使用一个共同的函数:
function doSomethingNoMatterWhat() {
// ...
}
thePromise
.then(result => {
// Presumably use `result`, then:
doSomethingNoMatterWhat();
})
.catch(error => {
// Presumably use `error`, then:
doSomethingNoMatterWhat();
});