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

问题描述 投票:0回答:1

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

angular-promise
1个回答
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)
        });
})
© www.soinside.com 2019 - 2024. All rights reserved.