从承诺中导出数组,但在另一个文件中需要时不加载?
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));
我正在尝试从数据库发出请求,我需要将多列的结果合并到一个数组中。 我通过在 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));