JavaScript 文件处理时重新排列
JavaScript rearange when file handeling
我正在尝试从 JSON 文件中读取对象并在其余代码中使用它。
为此,我使用了带有 node.js 的“fs”。
但是好像javascript在最后运行选择的部分。
const fs = require('fs');
let objList = [];
/* vvv Selected Part vvv */
fs.readFile("sample.json", (error, file) => {
if (error) {
console.log("ERROR!");
throw error;
}
console.log("here");
objList.push(JSON.parse(file.toString()));
console.log("> ", objList);
});
/* ^^^^^^^^^^^ */
console.log(">> ", objList);
输出是:
>> []
here
> [ { name: 'name goes here', age: 30 } ]
为什么会发生这种情况,我该如何解决?
另外,有没有更好的实现方式?
您的代码没有任何问题,不是错误
函数 fs.readFile
异步读取文件,这意味着它不会阻塞,所以您的程序会继续,您作为第二个参数传递的函数是一个回调,一旦读取文件完成就会触发。
有几种方法可以处理它:
其中之一是使用 fs.readFileSync
函数,它同步执行相同的操作,这意味着它会停止您的程序,直到读取文件完成。通常不推荐这样做,因为读取文件可能需要时间,最好以 non-blocking 方式进行。
它看起来像
const fs = require('fs');
let objList = [];
const file = fs.readFileSync("sample.json", {encoding:'utf8'})
objList.push(JSON.parse(file.toString()))
console.log(">> ", objList);
您也可以添加一个 try/catch
块来捕获错误
另一种方法是使用 async
函数和 await
关键字等待您的文件被读取使用 fs.promises
像这样:
const fs = require('fs');
async function myFunc() {
let objList = [];
const file = await fs.promises.readFile("sample.json","utf8")
objList.push(JSON.parse(file.toString()))
console.log(">> ", objList);
}
myFunc()
它使用了一个 Promise
,你可以等到它完成
我正在尝试从 JSON 文件中读取对象并在其余代码中使用它。 为此,我使用了带有 node.js 的“fs”。 但是好像javascript在最后运行选择的部分。
const fs = require('fs');
let objList = [];
/* vvv Selected Part vvv */
fs.readFile("sample.json", (error, file) => {
if (error) {
console.log("ERROR!");
throw error;
}
console.log("here");
objList.push(JSON.parse(file.toString()));
console.log("> ", objList);
});
/* ^^^^^^^^^^^ */
console.log(">> ", objList);
输出是:
>> []
here
> [ { name: 'name goes here', age: 30 } ]
为什么会发生这种情况,我该如何解决? 另外,有没有更好的实现方式?
您的代码没有任何问题,不是错误
函数 fs.readFile
异步读取文件,这意味着它不会阻塞,所以您的程序会继续,您作为第二个参数传递的函数是一个回调,一旦读取文件完成就会触发。
有几种方法可以处理它:
其中之一是使用 fs.readFileSync
函数,它同步执行相同的操作,这意味着它会停止您的程序,直到读取文件完成。通常不推荐这样做,因为读取文件可能需要时间,最好以 non-blocking 方式进行。
它看起来像
const fs = require('fs');
let objList = [];
const file = fs.readFileSync("sample.json", {encoding:'utf8'})
objList.push(JSON.parse(file.toString()))
console.log(">> ", objList);
您也可以添加一个 try/catch
块来捕获错误
另一种方法是使用 async
函数和 await
关键字等待您的文件被读取使用 fs.promises
像这样:
const fs = require('fs');
async function myFunc() {
let objList = [];
const file = await fs.promises.readFile("sample.json","utf8")
objList.push(JSON.parse(file.toString()))
console.log(">> ", objList);
}
myFunc()
它使用了一个 Promise
,你可以等到它完成