如何使用promises并尝试catch块

时间:2014-01-30 19:04:58

标签: javascript node.js promise

我有以下代码

var promise = getRaids(client);
promise.then(function (raids) {
    res.json(raids);
}, function (err) {
    console.error(err);
    res.send(403, { error: err});
});

我想将其转换为try catch块,我认为它更具可读性。 代码会是什么样的?

3 个答案:

答案 0 :(得分:1)

我认为不可能将其转换为try / catch块。这样做需要阻止try块内的promise,而JavaScript不允许阻止promise。

答案 1 :(得分:1)

使用这样的承诺,它将具有可读性:

getRaids(client)
.then(function (raids) {
    res.json(raids);
})
.catch(function (err) {
    console.error(err);
    res.send(403, { error: err});
});

答案 2 :(得分:0)

如果您真的想要,可以将Harmony与node.js和use generators一起使用:

  

当你向生成器对象抛出()错误时,实际上是错误   传播回到生成器的代码中,这意味着你可以   实际上使用try和catch语句来捕获它。

如果您希望通过承诺提供可读性,when.js会提供允许使用catchfinally等关键字的extended promise API。我确信Q和其他承诺库有类似的机制。

promise.then(function() {

}).catch(function(error) {

}).finally(function() {
    // cleanup / etc.
});