在promise对象中处理错误的正确方法是什么?

时间:2015-11-18 14:52:28

标签: javascript node.js es6-promise

说那是一个承诺对象:

return new Promise((resolve, reject) => {
            request.post(options, (err, res, body) => {
                if(err) {
                    reject(err);
                } else {
                    resolve(body);
                }
            });
        });

回调中有一个错误属性,我可以使用reject()来处理它。但是对于身体,我可以获得{ok: 1}{ok: -1}。那我该如何处理这个错误结果呢?

我想我可以resolve() body,并检查then()中的结果。或者我应该立即检查结果并将错误的结果放入reject()

2 个答案:

答案 0 :(得分:2)

根据我的经验,你可能不需要传递身体,而是解释命令是否成功。所以试试这个

return new Promise((resolve, reject) => {
            request.post(options, (err, res, body) => {
                if(err) {
                    return reject(err);
                } 
                if (body.ok == -1) return reject('bad news');

                return resolve('good news');

            });
        });

然后你用它作为:

funcAboveThatReturnsPromise()
.then( () => res.sendStatus(200).end() )
.catch( err => res.sendStatus(500).send(err) )

答案 1 :(得分:1)

你身体的错误应该被认为是错误的 - 然后拒绝。虽然理想情况下服务器应该返回错误状态代码。如果你不能修改服务器,我会怎么做:

return new Promise((resolve, reject) => {
        request.post(options, (err, res, body) => {
            if(err) {
                reject(err);
            } else if (body.ok === -1) {
                reject(new Error('error'));
            else {
                resolve(body);
            }
        });
    });