好吧我是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
我们退一步吧。
当您创建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)
});
})