javascript - 从承诺中导出数组,但在另一个文件中需要时不加载?
问题描述
我正在尝试从数据库发出请求,我需要将多列的结果组合到一个数组中。我通过在 Promise.all() 中提出所有请求来实现这一点,并且它可以工作。但是,问题是我需要在不同的文件中访问这些数据。当我在 fileB 中需要 fileA 时,数组似乎为空?
文件A.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
});
文件B.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
,以便您可以调用.then
另一个文件中的 Promise:
// 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);
});
您可以通过调用数组.map
来修剪代码:days
function dbRequest(day = null) {
return knexInstance.select('shift_time', String(day)).from('shr');
}
module.exports = Promise.all(days.map(dbRequest));
推荐阅读
- c# - 需要帮助运行具有输入类型的编译器
- assembly - 为什么 JALR 对偏移量的 LSB 进行编码?
- html - 使用 Beautifulsoup 提取下一个和不同标签的内容
- javascript - 在 TimescaleDB 中保存 Javascript Date.now() 毫秒时间戳
- r - 如何在`data.table`中添加计算变量的最小数据量的条件
- unix - 使用 sed 忽略行中的特定模式
- ruby - 如何为 ruby Tempfile 对象添加扩展名?
- julia - 用线性/非线性回归拟合两条曲线
- c# - foreach 和 Parallel.ForEach 的结果不同
- javascript - .forEach 与 Object.keys().forEach 在稀疏数组上的表现