Я новичок в Node / асинхронном кодировании, и я понимаю, что это базовый c вопрос, который говорит о некоторых основах, которые мне не хватает, но я просто не могу понять, как это должно Работа. Я заполняю базу данных, используя knex
, считывая данные из CSV и перебирая строки в for
l oop. В этом l oop мне нужно запросить другую таблицу в базе данных и вернуть соответствующее значение как часть новой создаваемой строки.
Я понимаю, что knex
возвращает ожидающий Promise
, так что у него пока нет доступа к возвращенному значению. Но я не могу понять структуру правильно с async/await
или Promise.all
; Я попробовал это несколькими способами, основываясь на других ответах, которые я видел, но ни один из них, по-видимому, не объясняет, что происходит достаточно хорошо, чтобы я мог успешно применить его в моем случае. Любая помощь очень ценится.
Мой seed
файл в настоящее время выглядит так:
exports.seed = function(knex) {
const fs = require('fs');
function createImage(row, event_id) {
return {
name: row[1],
event_id: event_id
}
};
function get_event_id(loc) {
knex('events')
.where({location: loc})
.first()
.then(result => {console.log(result)}); // <-- this never executes
};
let images = [];
const file = fs.readFileSync('./data.csv');
const lines = file.toString().replace(/[\r]/g, '').split('\n');
for (i=1; i<lines.length; i++) {
var row = lines[i].split(',');
var event_id = (async function () { return await get_event_id(row[0]) }) ();
images.push(createImage(row, event_id));
};
console.log(images);
// Inserts seed entries
// return knex('table_name').insert(images);
};
Вывод: [ { name: '003.jpg', event_id: undefined } ]
Мой data.csv
структурирован как:
Location,Name
Amsterdam,003.jpg,
...