Чего я хочу добиться:
- Сделать запрос из базы данных.
- Объедините результаты нескольких столбцов в один массив.
- Иметь доступ к этому массиву с помощью других функций или методов.
Я выполнил № 1 и № 2, сделав все запросы к базе данных в Promise.all() и объединив результаты в один массив.
Однако проблема в том, что я не могу получить доступ к массиву в своих методах (которые мне еще предстоит реализовать), потому что массив не содержит никакого содержимого до тех пор, пока не будут выполнены все промисы, поскольку он асинхронный.
Попытки:
1) я попытался экспортировать массив в другой файл (в надежде, что он сможет извлечь массив из обещания); однако, как вы можете видеть ниже, единственный найденный мной метод не сработал.
2) Единственные другие решения, которые я могу придумать, не будут работать в моей ситуации (например, в состоянии).
Ниже приведен мой текущий прогресс, мне еще не удалось выполнить требование номер 3. Я открыт для любых предложений, даже если это означает решение всей этой проблемы другим способом, чем я.
файлA.js
require('dotenv').config()
const knex = require('knex')
const knexInstance = knex({
client: 'pg',
connection: process.env.DB_URL,
})
let shiftR;
const days = ["monday", "tuesday", "wednesday"];
function dbRequest(day){
console.log("Day: "+day);
return knexInstance.select('shift_time',`${day}`).from('shr');
}
module.exports = Promise.all([
dbRequest(days[0] ? days[0]: null),
dbRequest(days[1] ? days[1]: null),
dbRequest(days[2] ? days[2]: null)
])
.then(results => {
return { shiftR: results } //the array only contains the dates once all the promises
//have been completed
});
ФайлB.js
const shiftRProm = require('./fileA');
shiftRProm.then(({ shiftR }) => {
console.log(shiftR);
});
Я в тупике, как это исправить. Если есть лучший способ выполнить то, что я пытаюсь сделать, я был бы признателен за предложения.
Для контекста, вот как выглядит база данных («SHR»), но я не думаю, что эта информация нужна для вопроса.
shift_time monday tuesday wednesday (...)
6 AM 1 1 1
7 AM 2 2 2
8 AM 3 3 3
9 AM 3 3 3
console.log(shiftR);
записывает не то, что вы ожидали? - person CertainPerformance   schedule 19.01.2020.then
илиawait
.shiftRProm.then(mainFn)
где вы определяете большую часть вещей внутриmainFn
- person CertainPerformance   schedule 19.01.2020.then
везде, вы можете рассмотреть всегда экспортировать функции (а не простые объекты или значения) - это значительно упрощает работу, поскольку обычно есть только одно место, где вам нужно вызвать.then
в промисе (а затем эта функция может синхронно вызывать все остальные функции, которым необходимо использовать значение разрешения) - person CertainPerformance   schedule 19.01.2020