Javascript 如何在Node.js中处理异步函数
我使用Node将Javascript 如何在Node.js中处理异步函数,javascript,node.js,Javascript,Node.js,我使用Node将.csv文件预处理为.json文件,为此我使用CSVTOJSONnpm包 我想等待解析完成,然后启动上传到数据库的过程 我发现节点需要将函数与回调链接起来,以便异步执行它们 但我不知道如何应用到我的程序中 这是代码 // 1. Read *.csv file + Parse fields and escape; @dir "raw_data" => @dir "processed" fs.readdir(rawDataPath, f
.csv
文件预处理为.json
文件,为此我使用CSVTOJSON
npm包
我想等待解析完成,然后启动上传到数据库的过程
我发现节点需要将函数与回调链接起来,以便异步执行它们
但我不知道如何应用到我的程序中
这是代码
// 1. Read *.csv file + Parse fields and escape; @dir "raw_data" => @dir "processed"
fs.readdir(rawDataPath, function (err, files) {
if (err) return console.log("Unable to scan raw_data : " + err);
console.log("Processing csv files to JSON...");
console.log("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
files.forEach(function (file) {
console.log(`CSV ${file.split(".")[0]} being converted...`);
csv({ ignoreEmpty: true })
.fromFile("raw_data/" + file)
.then((jsonObj) => {
// stringify JSON Object
var jsonContent = JSON.stringify(jsonObj);
fs.writeFile(
`processed_data/${file.split(".")[0]}.json`,
jsonContent,
"utf8",
function (err) {
if (err) {
console.log(
"An error occured while writing JSON Object to File."
);
return console.log(err);
}
console.log(
`${file} successfully converted to ${file.split(".")[0]}.json`
);
}
);
});
});
});
// 2. Upload to Cloud Firestore
fs.readdir(processedDataPath, function (err, files) {
if (err) return console.log("Unable to scan processed_data : " + err);
files.forEach(function (file) {
var quiz = require("./processed_data/" + file);
console.log(`Collection ${file.split(".")[0]} being updated...`);
quiz.forEach(function (obj) {
firestore
.collection(`${file.split(".")[0].toUpperCase()}`)
.doc(obj.id)
.set(obj)
.then(function (docRef) {
console.log(
`Document ${obj.id} successfully uploaded to Cloud Firestore!`
);
})
.catch(function (error) {
console.error("Error adding document: ", error);
});
});
});
});
有多种方法可以处理Javascript的异步特性。我将使用
fs.readFile()
作为一个简单的示例。这些是一些方法-
fs.promises.readFile('./some-1.txt').then((res) => {
return fs.promises.readFile('./some-2.txt');
// handle success - 1
}).then((res) => {
return fs.promises.readFile('./some-3.txt');
// handle success - 2
}).then((res) => {
// handle success - 3
}).catch((err) => {
console.log(err);
// handle error
});
- 回调-
- 承诺-
- 异步/等待-
fs.promises.readFile('./some-file.txt').then((res) => {
console.log(res); // handle success
}).catch((err) => { // only gets executed if there is an error
console.log(err); // handle error
});
fs.promises.readFile('./some-1.txt').then((res) => {
return fs.promises.readFile('./some-2.txt');
// handle success - 1
}).then((res) => {
return fs.promises.readFile('./some-3.txt');
// handle success - 2
}).then((res) => {
// handle success - 3
}).catch((err) => {
console.log(err);
// handle error
});
const main = async () => {
try {
const res = await fs.promises.readFile('./some-file.txt');
console.log(res)
// handle success
} catch(err) {
console.log(err);
// handle error
}
}