Node.JS,如何让代码等待管道完成文件创建?
Node.JS, How do i make the code await a pipe to finish creating a file?
我有以下代码:
const fs = require('fs');
var get = require('get-file');
async function func1(){
get('jonschlinkert/get-file', 'package.json', function(err, res) {
if (err) return console.error(err);
var file = fs.createWriteStream('mani.json');
res.pipe(file);
});
};
async function func2(){
await func1();
fs.readFile("./mani.json", "utf8", (err, jsonString) => {
if (err) {
console.log("Error reading file from disk:", err);
return;
}
try {
const test = JSON.parse(jsonString);
console.log(test.files['main.js']);
} catch (err) {
console.log("Error parsing JSON string:", err);
}
});
};
func2();
我需要找到一种方法使功能 2 仅在功能 1 的管道完成创建文件后激活,我很难使用 await func1();可以解决问题,但什么也没做,所以函数 2 会尝试读取一个不存在的文件。
提前谢谢你,祝你有愉快的一天。
好的,在研究文档后发现,当一个流完成时它会设置它的标志 .finish。所以我需要做的就是将“事件侦听器”*设置为 .finish 并在其中调用 func2,甚至不需要我尝试使用但未能使其工作的异步:
const fs = require('fs');
var get = require('get-file');
function func1(){
get('jonschlinkert/get-file', 'package.json', function(err, res) {
if (err) return console.error(err);
var file = fs.createWriteStream('mani.json');
file.on('finish', () => {
func2();
});
res.pipe(file);
});
};
function func2(){
fs.readFile("./mani.json", "utf8", (err, jsonString) => {
if (err) {
console.log("Error reading file from disk:", err);
return;
}
try {
const test = JSON.parse(jsonString);
console.log(test.files['main.js']);
} catch (err) {
console.log("Error parsing JSON string:", err);
}
});
};
func1();
谢谢大家,希望有一天这对某人有所帮助。
*不知道是不是叫事件监听
我有以下代码:
const fs = require('fs');
var get = require('get-file');
async function func1(){
get('jonschlinkert/get-file', 'package.json', function(err, res) {
if (err) return console.error(err);
var file = fs.createWriteStream('mani.json');
res.pipe(file);
});
};
async function func2(){
await func1();
fs.readFile("./mani.json", "utf8", (err, jsonString) => {
if (err) {
console.log("Error reading file from disk:", err);
return;
}
try {
const test = JSON.parse(jsonString);
console.log(test.files['main.js']);
} catch (err) {
console.log("Error parsing JSON string:", err);
}
});
};
func2();
我需要找到一种方法使功能 2 仅在功能 1 的管道完成创建文件后激活,我很难使用 await func1();可以解决问题,但什么也没做,所以函数 2 会尝试读取一个不存在的文件。
提前谢谢你,祝你有愉快的一天。
好的,在研究文档后发现,当一个流完成时它会设置它的标志 .finish。所以我需要做的就是将“事件侦听器”*设置为 .finish 并在其中调用 func2,甚至不需要我尝试使用但未能使其工作的异步:
const fs = require('fs');
var get = require('get-file');
function func1(){
get('jonschlinkert/get-file', 'package.json', function(err, res) {
if (err) return console.error(err);
var file = fs.createWriteStream('mani.json');
file.on('finish', () => {
func2();
});
res.pipe(file);
});
};
function func2(){
fs.readFile("./mani.json", "utf8", (err, jsonString) => {
if (err) {
console.log("Error reading file from disk:", err);
return;
}
try {
const test = JSON.parse(jsonString);
console.log(test.files['main.js']);
} catch (err) {
console.log("Error parsing JSON string:", err);
}
});
};
func1();
谢谢大家,希望有一天这对某人有所帮助。
*不知道是不是叫事件监听