从承诺中导出数组,但在另一个文件中需要时不加载?

Exporting an array from a promise, but not loading when required in another file?

我正在尝试从数据库发出请求,我需要将多列的结果合并到一个数组中。 我通过在 Promise.all() 中发出所有请求来实现这一点并且它有效。 但是,问题是我需要在不同的文件中访问这些数据。当我在我的文件 B 中需要文件 A 时,数组似乎是空的?

fileA.js

const days = ["monday", "tuesday", "wednesday"] 

function dbRequest(day){

    return knexInstance.select('shift_time',`${day}`).from('shr');
}

Promise.all([
            dbRequest(days[0] ? days[0]: null),
            dbRequest(days[1] ? days[1]: null),
            dbRequest(days[2] ? days[2]: null)
])
.then(results => {
    shiftR = results;
    console.log(shiftR)
    module.exports = { shiftR }; //the array only contains the dates once all the promises have been executed
});

FileB.js

const shiftR = require('./fileA');

console.log(shiftR);

我不知道如何解决这个问题。如果有更好的方法来完成我正在尝试做的事情,那么我将不胜感激。

对于上下文,这就是数据库的样子,但我认为该问题不需要此信息。

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  

Promise.all promise 分配给 module.exports,这样你就可以在另一个文件中的 Promise 上调用 .then:

// fileA.js
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 };
});
// FileB.js

const shiftRProm = require('./fileA');
shiftRProm.then(({ shiftR }) => {
  console.log(shiftR);
});

如果您只是想将已解析的 shiftR 值传递给 FileB,而不是其他任何东西,则无需将结果放入对象并进行解构:

// fileA.js
module.exports = Promise.all([
            dbRequest(days[0] ? days[0]: null),
            dbRequest(days[1] ? days[1]: null),
            dbRequest(days[2] ? days[2]: null)
]);
// FileB.js

const shiftRProm = require('./fileA');
shiftRProm.then((shiftR) => {
  console.log(shiftR);
});

您可以通过在 days 数组上调用 .map 来 trim 代码:

function dbRequest(day = null) {
  return knexInstance.select('shift_time', String(day)).from('shr');
}
module.exports = Promise.all(days.map(dbRequest));