Как извлечь массив из обещания (асинхронного) для использования в синхронном коде?

Чего я хочу добиться:

  1. Сделать запрос из базы данных.
  2. Объедините результаты нескольких столбцов в один массив.
  3. Иметь доступ к этому массиву с помощью других функций или методов.

Я выполнил № 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  

person ezg    schedule 19.01.2020    source источник
comment
Это выглядит правильно. console.log(shiftR); записывает не то, что вы ожидали?   -  person CertainPerformance    schedule 19.01.2020
comment
Итак, это так. Однако, поскольку shiftR находится внутри этого асинхронного блока, я не смогу получить к нему доступ ни в одном из своих методов, если только не поместлю свои методы в асинхронные блоки, и я чувствую, что это был бы неправильный способ решить эту проблему. Практически мне нужно иметь доступ к shiftR за пределами асинхронного кода, чтобы я мог изменять его и просматривать из любого места. Я имею в виду методы, которые мне еще предстоит реализовать в файле B   -  person ezg    schedule 19.01.2020
comment
если только я не помещу свои методы в асинхронные блоки Это совершенно правильный способ сделать это. Все, что должно иметь возможность потреблять данные, должно выполняться асинхронно, потому что данные извлекаются асинхронно. Нет другого способа, кроме как использовать .then или await. shiftRProm.then(mainFn) где вы определяете большую часть вещей внутри mainFn   -  person CertainPerformance    schedule 19.01.2020
comment
Ааа! Хорошо, я подумал, что должен быть лучший способ, но это имеет смысл, спасибо, что сообщили мне!   -  person ezg    schedule 19.01.2020
comment
Если у вас есть много файлов, которые должны потреблять что-то асинхронное, и вы не можете придумать, как собрать все это вместе без написания повторяющегося кода или .then везде, вы можете рассмотреть всегда экспортировать функции (а не простые объекты или значения) - это значительно упрощает работу, поскольку обычно есть только одно место, где вам нужно вызвать .then в промисе (а затем эта функция может синхронно вызывать все остальные функции, которым необходимо использовать значение разрешения)   -  person CertainPerformance    schedule 19.01.2020
comment
Потрясающий!!! Благодарю вас! Я очень ценю вашу помощь!   -  person ezg    schedule 19.01.2020