我有以下代碼:
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 嘗試讀取一個不存在的檔案。
提前謝謝你,祝你有美好的一天。
uj5u.com熱心網友回復:
好的,在研究檔案后發現,當一個流完成時,它會設定它的標志.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();
謝謝大家,希望有一天這對某人有所幫助。
*我不確定它是否稱為事件偵聽器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/360676.html
上一篇:承諾值的總和和回傳承諾JS
