Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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_Json_Node.js_Fs - Fatal编程技术网

同步文件读取是否会阻止所有javascript执行,或者只是事件循环读取?

同步文件读取是否会阻止所有javascript执行,或者只是事件循环读取?,javascript,json,node.js,fs,Javascript,Json,Node.js,Fs,我使用节点模块jsonfile读取json文件,并使用express模块和res.json()路由它 据我所知,我不能使用异步读取,因为json的操作只能在回调中处理,因此实际上不可能返回数据并使用res.json()为其提供服务 这是我想要的,但实际上,这要么返回未定义的,要么返回承诺,具体取决于实现 同步读取文件会阻止整个服务器的执行,还是只阻止app.get('/api/announcements')的事件循环 另外,最正确的方法是什么?整个节点进程都有一个事件循环,因此同步读取将阻止所有

我使用节点模块jsonfile读取json文件,并使用express模块和res.json()路由它

据我所知,我不能使用异步读取,因为json的操作只能在回调中处理,因此实际上不可能返回数据并使用res.json()为其提供服务

这是我想要的,但实际上,这要么返回
未定义的
,要么返回
承诺
,具体取决于实现

同步读取文件会阻止整个服务器的执行,还是只阻止
app.get('/api/announcements')的事件循环


另外,最正确的方法是什么?

整个节点进程都有一个事件循环,因此同步读取将阻止所有事件。(经受住……)

您希望执行以下操作:

app.get('/api/announcements', function(req, res) {
   //define anonymous function that will be used when getAnnouncements is done.
   utils.getAnnouncements(function(err,fileData){
     // handle if(err)
     res.json(fileData)
   })
})

getAnnouncements: function(callback) {
  //read file async, using callback function to handle results
  jsonfile.readFile('announcements.json', function(err, fileData) {
     callback(err, fileData)
  })
  //or just `jsonfile.readFile('announcements.json',callback)`
}
app.get('/api/announcements', function(req, res) {
   //define anonymous function that will be used when getAnnouncements is done.
   utils.getAnnouncements(function(err,fileData){
     // handle if(err)
     res.json(fileData)
   })
})

getAnnouncements: function(callback) {
  //read file async, using callback function to handle results
  jsonfile.readFile('announcements.json', function(err, fileData) {
     callback(err, fileData)
  })
  //or just `jsonfile.readFile('announcements.json',callback)`
}