添加拒绝/解决以捕获/成功

时间:2016-09-01 07:51:09

标签: javascript node.js promise bluebird

我使用以下代码,如果我应该添加拒绝,我想知道最佳实践用法 捕获中的这个承诺?

run: function (req, res) {

        if (req) {
            return this._un(req).then(function() {  
                return proce.restart().then(function() {                    
                    return res.status(200).end("sucess");   
                    //Here should I use reslove
                });                                                             
            }).catch(function(err) {                
                return res.status(500).send("error: " + err);
                //Here should I use reject???               
            });                     
        }
        else {          
            return new Promise(function(resolve, reject) {  
                reject("No application content found");
            });         
        }       
    }
};

1 个答案:

答案 0 :(得分:2)

你没有"添加拒绝"承诺。承诺要么未解决,要么已解决(解决/拒绝)。

如果提供了req,那么您的代码当前会返回一个承诺,该承诺将使用end的返回值(如果重启成功)或send的返回值来解析(如果它不是,我相信在这两种情况下都是响应对象本身(res)。

如果您希望调用者知道重启是否成功,那么是的,您想要拒绝承诺;与ES2015承诺你可以通过投掷catch来做到这一点,我认为蓝鸟是相似的:

.catch(function(err) {
    res.status(500).send("error: " + err);
    throw err; // Or `throw new Error(err);`, it depends on what `err` is and your convention
})

...或使用Bluebird的Promise.reject(也兼容ES2015):

.catch(function(err) {
    res.status(500).send("error: " + err);
    return Promise.reject(err);
})

如果您没有希望来电者知道重启是否成功,那就不要。