Асинхронные функции NodeJS с мангустом

Как заставить функцию .create() ждать заполнения таблицы перед ее возвратом. Поскольку data возвращает undefined

const Construct = require('../models/constructModel')
const TemplateConstruct = require('../models/constructTemplateModel')

exports.create = async function () {
  TemplateConstruct.find().then(function (constructs) {
    let table = []
    constructs.forEach((construct) => {
      let newconstruct = new Construct()
      newconstruct.number = construct.number
      newconstruct.name = construct.name
      newconstruct.basePrice = construct.basePrice
      newconstruct.baseMicrowave = construct.baseMicrowave
      newconstruct.atomGain = construct.atomGain
      newconstruct.save().then(table.push(newconstruct))
    })
    console.info(table)
    return table
  })
  // return [ 'test' ]
}

обойти это:

constructFactory.create().then(function (data) {
  console.info(data)
})
return обещание.
Jonas Wilms 11.11.2018 19:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо того, чтобы связывать обещание через .then(), вы можете await:

const Construct = require('../models/constructModel');
const TemplateConstruct = require('../models/constructTemplateModel');

exports.create = async function () {
  const constructs = await TemplateConstruct.find();
  let table = [];

  for (const construct of constructs) {
    let newconstruct = new Construct();
    newconstruct.number = construct.number;
    newconstruct.name = construct.name;
    newconstruct.basePrice = construct.basePrice;
    newconstruct.baseMicrowave = construct.baseMicrowave;
    newconstruct.atomGain = construct.atomGain;
    await newconstruct.save();
    table.push(newconstruct);
  }

  console.info(table);
  return table;
};

Спасибо, это решило мою проблему. Теперь я немного лучше понимаю, как работает async!

Benjamin Sanvoisin 11.11.2018 19:26

Другие вопросы по теме