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

What's the proper way to handle error result in promise object?

假设有一个 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()?

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

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) )

你的 body 中的一个错误应该被认为是错误的 - 一个错误 - 并因此拒绝。虽然理想情况下服务器应该 return 错误状态 code.Here 如果你不能修改服务器我会怎么做:

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