Javascript 在承诺内设置异步变量
我的目标是映射json文件列表,并将它们映射到对象中,然后在node.js中返回它们,到目前为止,我有以下代码:Javascript 在承诺内设置异步变量,javascript,node.js,file,express,io,Javascript,Node.js,File,Express,Io,我的目标是映射json文件列表,并将它们映射到对象中,然后在node.js中返回它们,到目前为止,我有以下代码: function getDirFiles(dataFolder) { return new Promise((resolve, reject) => { let fileNames = []; fs.readdir(dataFolder, (err, files) => { if (err) { console.log(e
function getDirFiles(dataFolder) {
return new Promise((resolve, reject) => {
let fileNames = [];
fs.readdir(dataFolder, (err, files) => {
if (err) {
console.log(err);
reject(err);
} else {
files.forEach(file => {
fileNames.push(file);
});
resolve(fileNames);
}
});
});
}
let data = []
getDirFiles(dataFolder).then(files =>{
files.forEach(async file =>{
const fileName = __dirname + '/parsed_json_data' + '/' + file
await fs.readFile(fileName , 'utf8', async function(err, data){
if(err) throw err;
data = await JSON.parse(data);
})
})
})
console.log(data) //return empty array like it was initialized
因此,首先我返回一个承诺,并调用一个
。然后()
来解析函数,但是由于下一个操作也是异步的,所以我希望在代码继续之前等待这个操作。如何实现这一点,以便我可以从所有文件返回json?等待fs。由于readFile()
不向wait
返回承诺(甚至任何值),因此不需要readFile
。另外,forEach不会等待异步函数,回调也不会等待每次调用完成。您还使用了一个名为data
的参数变量,这使得您没有在readFile Callback中设置外部作用域data
,也就是JSON.parse返回值,而不是PromiseOk好的点,我修复了所有这些,因此它将一个新的jsonelement推送到数组中,但它仍然记录一个空数组…您是否也更改了参数名?拥有功能(错误,数据)
使您无法访问外部数据。此外,您不能将其作为其全部异步代码记录在then()之外。使用wait不会停止异步函数之外的执行