如何使用 nodejs 处理带有回调的承诺?

How to handle a promise with a callback with nodejs?

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

我在创建文档方面做得很好,但下一部分是检查尝试这样做是否有错误,所以如果有错误,我希望我的服务器 return 一个对象经典错误信息。

这是我的代码:

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;" 实际上没有 return,我已经和邮递员确认过(没有得到回复)。

我认为这里的问题是我没有正确处理 .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"}

这意味着代码没有进入回调(它没有打印 'failure' 或 'ok' 对象)

我在这里缺少什么?:(

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

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

如果出现错误,promise 应该被拒绝。 Promise.resolve 在已经有承诺时是多余的,并且在 async..await 时总是多余的。

应该是:

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