如何使用 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',
}
}
我正在使用带有 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',
}
}