node.js - 如何导出从 Node.js 模块异步加载的日期
问题描述
我正在努力使用以下模块 fetch.js,它调用在多个文件中生成输出的子进程。我希望这个模块返回一个包含该输出的 JSON。
var util = require('util');
const path = require('path');
const fs = require('fs');
const path1 = path.resolve(__dirname, 'out', 'file1');
const path2 = path.resolve(__dirname, 'out', 'file2');
let out1, out2;
function generate() {
var spawn = require('child_process').spawn;
var prog = spawn('prog', [<arguments>]);
prog.on('exit', function (code) {
if (code != 0) {
console.log('Compilation failed.');
} else {
out1 = fs.readFileSync(path1, 'utf8');
out2 = fs.readFileSync(path2, 'utf8');
}
})
prog.stderr.on('data', function (data) {
console.log(data);
})
return {out1, out2}
}
module.exports = new Promise(function(resolve, reject) {
resolve(generate());
});
我主要做以下事情
const promise = require('./fetch');
promise.then((o1, o2) => {
console.log('O = ' + typeof o1);
})
我知道问题是生成的返回发生在 out1 和 out2 获取它们的值。如何纠正?TIA
解决方案
您可以从函数本身返回 promisegenerate
并导出generate
函数。
const path = require('path');
const fs = require('fs');
function generate() {
return new Promise((res, rej) => {
const spawn = require('child_process').spawn;
const prog = spawn('prog', []);
prog.on('exit', function (code) {
if (code != 0) {
rej('Compilation failed');
} else {
const path1 = path.resolve(__dirname, 'out', 'file1');
const path2 = path.resolve(__dirname, 'out', 'file2');
const out1 = fs.readFileSync(path1, 'utf8');
const out2 = fs.readFileSync(path2, 'utf8');
res({ out1, out2 })
}
})
prog.stderr.on('data', function (data) {
console.log(data);
})
})
}
module.exports = generate;
现在,当您使用它时,您可以将其用作:
const fetch = require('./fetch');
fetch()
.then(data=>{
....
});
推荐阅读
- javascript - 猜测反应中的数字
- json - 有条件地从 Bash 中类似 JSON 的键值对中 grep 值
- flutter - 加载内容时如何在颤动的WebView中显示微调器
- swift - 如何检查文本字段是否存在 Xcode(以编程方式编码)
- bash - convert-im6.q16 (ImageMagick):如何指定命令或选项?
- javascript - postMessage 无法从父级到 iframe
- uwp - 如何在 BackgroundTransfer 中处理进度 DownloadOperation C++/WinRT
- r - 在 R 中使用 trimws 函数后如何包含所有数据?
- flutter - 在抽象类中访问 TextFormField 控制器
- scala - 使用 Gradle 为 Gatling 构建可执行 Jar