好吧,我是Angularjs
的新手,我当前的任务之一是编写CRUD
功能,然后使用Promise进行处理。
dao.updateEntityCharSpecUseRelSql = function (paramField) {
return new Promise(function (resolve, reject) {
.......
}).catch(err => { reject(err)});// **my PM says, catching error is wrong**
}
module.exports = dao;
首先,我认为catch块还不错,因为我是从Promise对象获取它的,如果出了问题,该对象会返回错误。
但是我的Pm说,要使用此功能,诺言应该首先具有 .then()
。
在没有catch()
的情况下使用 then()
确实是一种不好的做法。他的建议是,我应该在try & catch
之类的
Promise()
块。
new Promise (function(resolve, reject){
try {
resolve(something)
}catch(err){
reject(err)
}
})
请为此启发我。TIA
答案 0 :(得分:2)
让我们退后一步。
创建new Promise()
时,您有责任处理每个成功和失败案例。
谁正在调用您的函数(并获得诺言)负责在then()
回调(如果诺言已成功解决)中处理响应,或者是catch()
回调(如果诺言被拒绝)
因此,您无需履行自己的诺言。
示例:
function init() {
getAsyncValues()
.then(function (result) {
// it will do something based on his business logic
})
.catch(function (error) {
// it will do something based on his business logic
});
}
function getAsyncValues() {
return new Promise(function(resolve, reject) {
...
resolve(SOME_VALUES);
...
reject(SOME_ERRORS);
})
}
如果您的“承诺处理程序”需要在解决问题之前调用异步任务,则可以等待其解决,例如:
const examplePromise = new Promise(fuction (resolve, reject) {
asyncTask() // executing an async task
.then(function(result) {
resolve(result);
})
.catch(function(error) {
reject(error)
});
})