在Promise对象中捕获错误的正确方法

时间:2018-06-20 02:46:34

标签: angular-promise

好吧,我是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

1 个答案:

答案 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)
        });
})