使用 fs.writeFile 时,我创建一个如下所示的 JSON 文件:
[{"schoolname":"Scottsdale","StudentFirst":"john","StudentLast":"smith","grade":"2","email":"[email protected]","ParentLast":"Smith","ParentFirst":"John"}]
除非当我需要相同的文件时,我收到错误:
Unexpected end in JSON input
我之前也做过同样的事情,但使用更大的数据,它似乎工作得很好。
await fs.writeFile(`./${fileName}.json`,
JSON.stringify(result.recordsets[0]), function(err) {
if(err) {
return console.log(err)
}
})
const file = require(`./${fileName}.json`)
预期结果应返回上面的 JSON,以便我可以获得该文件的副本并迭代它。
该错误是由于需要空 JSON 文件而导致的。 JSON 文件为空,因为
fs.writeFile
是异步的,并且您不正确地使用了 await
。
await
await
与 Promise 一起使用,而不能与回调一起使用选项 1:使用
fs.writeFileSync
fs.writeFileSync(
`./${fileName}.json`,
JSON.stringify(result.recordsets[0])
)
const file = require(`./${fileName}.json`)
选项 2:将
fs.writeFile
包裹在承诺中
(async () => {
await new Promise((resolve, reject) => {
fs.writeFile(
`./${fileName}.json`,
JSON.stringify(result.recordsets[0]),
function(err) {
if (err) {
reject()
return console.log(err)
}
resolve()
}
)
});
const file = require(`./${fileName}.json`)
})();
怎么样
import fsPromises from 'fs/promises';
import path from 'path';
export async function setLocalData(locale: string, path: string, data: any) {
if (path)
try {
const readJsonData = JSON.parse(
await fsPromises.readFile(filePath, 'utf8'),
);
readJsonData[locale + path] = data;
const writejsonData = JSON.stringify(readJsonData);
await fsPromises.writeFile(filePath, writejsonData);
} catch (err) {
console.error(`Error writing file: ${err}`);
}
}