Как экспортировать данные, присутствующие в ожидании - PullRequest
0 голосов
/ 17 марта 2019

Я борюсь с обещаниями, асинхронно / жду. Здесь я хочу экспортировать объект gridfs в другой файл, но когда я импортирую его, используя require и выполняю console.log (gridfs), он дает пустой объект. Может кто-нибудь помочь, как я мог экспортировать gridfs

const mongoose = require('mongoose');

async ()=> {
    await mongoose.connection.on('connected', ()=>{
        const gridfs = require('mongoose-gridfs')({
            collection: 'sharedfiles',
            model: 'SharedFiles',
            mongooseconnection: mongoose.connection
        });
        global.sharedfile = gridfs;
    });
module.exports = sharedfile;
} 

файл, где мне нужно gridfs:

const sharedfile = require('path to above file');
//under another promise
rslt.data.on('end', ()=>{
    console.log(sharedfile);
}

результат, который я получаю, это {}, потому что console.log запускается до загрузки скрипта, может кто-нибудь подсказать, как это исправить. (Я новичок в обещаниях и async / await).

1 Ответ

0 голосов
/ 18 марта 2019

Две вещи.

Во-первых, вы фактически никогда не вызываете свою анонимную асинхронную функцию.

Во-вторых, ваш экспорт находится в области действия этой функции, поэтому он никогда не устанавливается.Поэтому ваше требование возвращает пустое содержимое '{}' файла module.export.

Попробуйте что-то вроде этого.

const mongoose = require('mongoose');

module.exports = async ()=> {
    await mongoose.connection.on('connected', ()=>{
        const gridfs = require('mongoose-gridfs')({
            collection: 'sharedfiles',
            model: 'SharedFiles',
            mongooseconnection: mongoose.connection
        });
     global.sharedfile = gridfs;
     return gridfs;
    });
} 

Затем ваш экспорт предоставляет асинхронную функцию (обещание) для требуемого кода.Вы вызываете его с помощью () и используете .next для обработки возвращенного результата.

require('path to above file') ()
   .next( 
      function (gridfs) {
        console.log (gridfs)
      } )
   .catch (...)

Или вы можете потребовать его, а затем вызвать его позже.

const getGridFs = require('path to above file')
...
getGridFs ( )
  .next (gridfs => {console.log(gridfs)})
  .catch (error => {console.error(error)})

Наберитесь терпения:Вы поймете это.

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