我使用以下代码,如果我应该添加拒绝,我想知道最佳实践用法 捕获中的这个承诺?
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");
});
}
}
};
答案 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);
})
如果您没有希望来电者知道重启是否成功,那就不要。