我試圖創建一個目錄,然后在該目錄中創建一個檔案,然后我試圖洗掉該目錄。如果我一個一個地運行這些函式,代碼就可以作業,但是當我一起運行它們時,我得到這個錯誤:
[錯誤:ENOENT:沒有那個檔案或目錄,打開'C:\Users\Andrei\Desktop\tw\test\test.txt'] { errno: -4058, code: 'ENOENT', syscall: 'open', path : 'C:\Users\Andrei\Desktop\tw\test\test.txt' }
此外,如果我只運行前兩個功能,一切正常。我的代碼有什么問題?
const rimraf = require("rimraf");
const mkdirp = require("mkdirp");
const fs = require("fs");
const err1 = new Error("File Error!");
const err2 = new Error("Directory deleting Error!");
function createDirectory() {
mkdirp("./test");
}
function createFile() {
fs.writeFile("./test/test.txt", "this is my text", function (err1) {
if (err1) throw err1;
console.log("Results Received");
});
}
function deleteDirectory() {
rimraf("./test", function (err2) {
if (err2) console.log(err2);
console.log("Succesfully deleted a directory");
});
}
function main() {
createDirectory();
createFile();
deleteDirectory();
}
main();
uj5u.com熱心網友回復:
這些函式是異步的。您需要使用一些Promise邏輯來使它們鏈接:
const rimraf = require("rimraf");
const mkdirp = require("mkdirp");
const fs = require("fs");
const err1 = new Error("File Error!");
const err2 = new Error("Directory deleting Error!");
function createDirectory() {
return mkdirp("./test");
}
function createFile() {
return new Promise((resolve) => {
fs.writeFile("./test/test.txt", "this is my text", function (err1) {
if (err1) throw err1;
console.log("Results Received");
resolve();
});
});
}
function deleteDirectory() {
return new Promise((resolve) => {
rimraf("./test", function (err2) {
if (err2) console.log(err2);
console.log("Succesfully deleted a directory");
resolve();
});
});
}
function main() {
createDirectory()
.then(() => {
return createFile();
})
.then() => {
return deleteDirectory();
});
}
main();
uj5u.com熱心網友回復:
mkdirp, writeFile, 和rimrafar 都是異步的,但是您不會在要求較晚的開始之前等待較早的完成。
我建議使用asyncfunctoin 和那些啟用了 promise 的版本(mkdirp已經啟用了 promise,使用writeFilefrom fs/promises,現在必須有一個 promise 包裝器rimraf;如果沒有,請使用util.promisify)。然后你可以使用await:
async function main() {
await createDirectory();
await createFile();
await deleteDirectory();
}
其中(例如)createFile是:
const {writeFile} = require('fs/promises');
// ...
async function createFile() {
await writeFile("./test/test.txt", "this is my text");
console.log("Results Received");
}
uj5u.com熱心網友回復:
你需要等待函式執行
使用 async package it inbuild in node return promise in all function 正如 liam 在上面的代碼中所做的那樣。然后呼叫異步系列
function main() {
async.series([
createDirectory(),
createFile(),
deleteDirectory();
])
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341330.html
標籤:javascript
上一篇:如何根據特定函式對陣列進行分組?
