Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在承诺内设置异步变量_Javascript_Node.js_File_Express_Io - Fatal编程技术网

Javascript 在承诺内设置异步变量

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

我的目标是映射json文件列表,并将它们映射到对象中,然后在node.js中返回它们,到目前为止,我有以下代码:


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不会停止异步函数之外的执行