如何使用Node.js回调处理Promise?

时间:2019-04-06 02:48:15

标签: node.js promise callback response nano

我正在使用带有nodejs的nano npm模块制作一个应用程序,我的一个异步函数旨在在Cloudant中创建一个对象,但我不太确定如何处理带有回调的Promise.resolve。响应的重要部分,应该是我的服务器必须响应。

我在创建文档方面做得很好,但是下一部分是检查尝试执行该操作是否有错误,因此如果有错误,我希望服务器返回带有经典错误消息的对象。< / p>

这是我的代码:

exports.createMeeting = async (body) => {
var response;
object = {"name": "Billy Batson"}
console.log("-------------")

//Trying to insert the document
response = await Promise.resolve(db.insert(object).then((body, err) => {
        //This is the part I'm trying to check if the db.insert did fail
        if (err) {
            response = {
                message: 'Failure',
                statusCode: '500',
            }
            console.log(JSON.stringify(response));
        } else {
            response = {
                message: 'Ok',
                statusCode: '201',
            }
            console.log(JSON.stringify(response));
        }
    }));
}
console.log("******* ", JSON.stringify(response));
return response;

}

如果我尝试运行此代码,则输出为:

-------------
{"message":"Ok","statusCode":"201"}
*******  undefined

第一个打印的对象是因为代码到达了我用状态代码为响应对象分配状态代码201的部分,但是第二个部分却无法识别“ response”的值和“ return response”行。实际上没有返回,我已经与邮递员确认(没有收到回复)。

我认为这里的问题是我没有正确处理.then()语法,我尝试使用以下方式更改为经典回调:

response = await Promise.resolve(db.insert(object),(body, err) => {
    if (err) {
        response = {
            message: 'Failure',
            statusCode: '500',
        }
        console.log(JSON.stringify(response));
    } else {
        response = {
            message: 'Ok',
            statusCode: '201',
        }
        console.log(JSON.stringify(response));
    }
});

但它会打印:

-------------
*******  {"ok":true,"id":"502c0f01445f93673b06fbca6e984efe","rev":"1-a66ea199e7f947ef40aae2e724bebbb1"}

这意味着代码没有进入回调(这不是在打印“失败”或“确定”对象)

我在这里缺少什么?:(

1 个答案:

答案 0 :(得分:1)

nano在省略回调时提供基于承诺的API。

这不是在Promise中处理错误的方式。 then回调函数有1个参数, 不会是err

如果出现错误,预计会拒绝承诺。如果已经有了承诺,Promise.resolve就是多余的,async..await总是多余的。

应该是:

try {
    const body = await db.insert(object);
    response = {
        message: 'Ok',
        statusCode: '201',
    }
} catch (err) {
    response = {
        message: 'Failure',
        statusCode: '500',
    }
}