Sequelize вставка данных queryInterface при чтении CSV-файла - PullRequest
0 голосов
/ 04 марта 2020

Я хочу вставить данные из сеялки csv thorgh в nodejs, используя sequelize, но мне нужно настроить один файл (subdistrictId) для таблицы Subdistricts в моей базе данных по данным об именах районов в файле csv.

, поэтому я вывожу sh все данные в переменную массива при чтении csv и выполнении bulkInsert в базу данных

const fs = require('fs');
const csvParser = require('csv-parser');
const path = require('path');

module.exports = {
  up: async queryInterface => {
    const userAddressesMapping = [];

    await fs
      .createReadStream(
        path.join(__dirname, '../seedData/csv/userAddresses.csv')
      )
      .pipe(csvParser({ separator: ',' }))
      .on('error', err => {
        console.log(err);
      })
      .on('data', async data => {
        const subdistrictId = await queryInterface.rawSelect(
          'Subdistricts',
          {
            where: { name: data.districtName }
          },
          ['id']
        );

        userAddressesMapping.push({
          id: data.id,
          streetAddress: data.streetAddress === '' ? null : data.streetAddress,
          createdAt: data.createdAt,
          updatedAt: data.updatedAt,
          userProfileId: data.userProfileId,
          subdistrictId
        });
      })
      .on('end', () => {
        console.log(userAddressesMapping);
        return queryInterface.bulkInsert('UserAddresses', userAddressesMapping);
      });
  },
  down: queryInterface => queryInterface.bulkDelete('UserAddresses', null)
};

, но массив был пуст в потоке чтения 'end'. если я не получаю subdistrictId данных, то все просто отлично работает. я предполагаю, что сценарий, в котором я pu sh данные в массив никогда не выполняется, потому что createReadStream в «data» не ждет и продолжает завершаться, пока массив еще пуст

какое-либо решение для этого? или, может быть, кто-то знает, как обрабатывать createReamStream до тех пор, пока скрипт не будет успешно выполнен на 100% до того, как go до 'end'

...