Я делаю приложение, используя модуль nano npm с nodejs, одна из моих асинхронных функций предназначена для создания объекта в Cloudant, но я не совсем уверен, как обработать Promise.resolve с помощью обратного вызова, который является важная часть ответа, которая, как предполагается, должен отвечать мой сервер.
Я хорошо справляюсь с созданием документа, но следующая часть - проверить, не была ли ошибка при попытке сделать это, поэтому, если есть ошибка, я бы хотел, чтобы мой сервер возвратил объект с классическим сообщением об ошибке.
Это мой код:
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"}
Это означает, что код не попадает в функцию обратного вызова (он не печатает объекты 'fail' или 'ok')
Что мне здесь не хватает?: (