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

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

本文关键字:结果 错误 方法 对象 promise 处理 什么      更新时间:2023-09-26

假设有一个promise对象:

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

回调中有一个error属性,我可以用reject()来处理它。但有了body,我可以得到{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) )

身体中的错误应该被视为错误,因此拒绝。尽管理想情况下服务器应该返回错误状态代码。如果你不能修改服务器,我会这么做:

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