我在名为index.main.js的文件中具有此异步功能,该文件具有变量'targetFiles',我想将其导出到另一个文件index.js。问题是我找不到一种方法来导出此特定变量的值,而不会导致结果为“ undefined”。
我尝试实现promise,回调,导出默认功能,并进行了无数小时的研究,但无济于事。
//this code is in index.main.js
var targetFiles = "";
async function listFilesInDepth()
{
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucketName = 'probizmy';
const [files] = await storage.bucket(bucketName).getFiles();
console.log('List Of Files Available:');
files.forEach(file =>
{
targetFiles = file.name; //this is the variable to export
console.log(`-----`+file.name);
});
return targetFiles;
}
module.exports = {
fn : targetFiles
}
尝试将值导出到index.js为空或“未定义”
//this is the code in index.js
const a = require('./index.main');
console.log(a.fn); //undefined or empty
应该作为输出的期望值是targetFiles的值。假设如果async函数中的targetFiles是abc12345.JSON,则index.js中的console.log应该具有该值。
我希望有人能给我一些有关如何克服这个问题的见解。预先谢谢你:)
答案 0 :(得分:0)
以下解决方案可能会对您有所帮助,但不确定您的用例。 (不使用module-exports
):
您可以使用request-context
package来实现相同的功能。
包的作用是,您可以针对value(data)
设置key
,然后在同一context
内的以下代码执行中访问相同的内容。
运行npm install request-context
在主app.js
(服务器文件)中,将request-context
注册为中间件。
const contextService = require("request-context");
const app = express();
...
// Multiple contexts are supported, but below we are setting for per request.
app.use(contextService.middleware("request"));
...
然后在您的index.main.js
中,一旦targetFiles
准备就绪,请将targetFiles
设置为请求上下文。
const contextService = require("request-context");
...
files.forEach(file =>
{
targetFiles = file.name; //this is the variable to export
console.log(`-----`+file.name);
});
// Here `Request` is the namespace(context), targetFileKey is the key and targetFiles is the value.
contextService.set("request:targetFileKey", targetFiles);
return targetFiles;
}
...
在同一请求中,您想使用targetFile
时,可以执行以下操作:
index.js
(可以是设置后需要targetFiles
的任何文件):
const contextService = require("request-context");
...
// Reading from same namespace request to which we had set earlier
const targetFiles = contextService.get("request:targetFileKey");
...
请注意:
您将能够以与您设置的相同的targetFiles
访问request
。也就是说,我们在request-context
中配置的app.js
是针对每个API请求的,这意味着,在每个API请求中,您都必须在读取之前进行设置。
如果上述解决方案不适合您,请告诉我。