Пн goose возвращает неопределенное значение даже с ожиданием. Любое предположение может быть неверным? - PullRequest
2 голосов
/ 15 марта 2020

Я тестирую некоторые функции в понедельник goose, я хочу узнать что-то новое. Я играю с поддокументами. Рассмотрим код ниже. Почему c печатается как неопределенное? Я использую await, должно подождать, не так ли?

pushSubdocument();//calls the function

async function pushSubdocument() {
  const doc = await findByIdMongoose(); //I ask to await
  console.log(doc);//I am printing here, and it is undefined
}
function findByIdMongoose() {
  Document.findById({ _id: "5e6d0f3e8afae22ee0cc238c" })
    .select("friends")
    .then(doc => {
        doc.friends.push({
        name: "Maria",
        email: "mariadomar@test.com",
        relatives: []
      });

      doc.save().then(() => {
        console.log("saved!");
      });
// if I print it here, before returning, it is okay
      return doc;
    });
}

Смежный вопрос: Asyn c Ожидание с понедельником goose Возвращает пустой объект

1 Ответ

1 голос
/ 15 марта 2020

findByIdMongoose() вернет неопределенное значение, потому что do c, который вы пытаетесь вернуть, будет возвращено после вызова этой функции asynchronous nature of node js. И нет никаких оснований ждать non async функции findByIdMongoose().

Вы можете сделать что-то вроде этого

async function pushSubdocument() {
  const doc = await findByIdMongoose(); //I ask to await
  console.log(doc);//I am printing here, and it is undefined
}
async function findByIdMongoose() {

let doc= await Document.findById({ _id: "5e6d0f3e8afae22ee0cc238c" }).select("friends");

 doc.friends.push({
        name: "Maria",
        email: "mariadomar@test.com",
        relatives: []
      });
await doc.save();
return doc ; // now it will be wrapped in promise and you can await the function


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...