Javascript 这是异步代码还是阻塞代码?
如果我有Javascript 这是异步代码还是阻塞代码?,javascript,json,node.js,Javascript,Json,Node.js,如果我有JSON.stringify在writeFile中,这就是阻塞代码。假设它是一个大文件。这就是为什么当我在一秒钟内多次按下触发此api端点的按钮时,会出现错误连接被拒绝的原因吗 app.patch('/', function(req, res) { ...some query fs.writeFile(path.join(__dirname, "../../") + 'Data/deals.json', JSON.stringify(tickets), function (err) {
JSON.stringify
在writeFile
中,这就是阻塞代码。假设它是一个大文件。这就是为什么当我在一秒钟内多次按下触发此api端点的按钮时,会出现错误连接被拒绝的原因吗
app.patch('/', function(req, res) {
...some query
fs.writeFile(path.join(__dirname, "../../") + 'Data/deals.json', JSON.stringify(tickets), function (err) {
if (err) {
console.log(err);
return res.status(400).json({error: err});
}
return res.status(200).json({success: true, message: 'Deal Updated successfully'});
});
})
编辑#1:
JSON.stringify
同步地将对象解析为字符串。但是您没有在补丁
函数中调用JSON.stringify
,而不是在writeFIle中调用
原件:
它是异步的。如果要同步写入文件,必须使用writeFileSync
欲了解更多信息,请访问
例子
可能是因为写入操作尚未完成,因此文档被锁定在文件系统中(如果您在windows中打开文本文件并尝试同时重命名它,也会发生同样的情况)。如果我确实进入定义“大文件”,则我获取加载资源失败:net::ERR\u CONNECTION\u拒绝
JSON.stringify()非常快。此外,获得“连接被拒绝”并不是阻塞事件循环(这会导致请求挂起)的症状。@robertklep你是对的,nodemon是个问题。不,这是阻塞代码。。。当我做补丁时,在那之后,<1000ms,我确实得到了相同的资源。。。我获取加载资源失败:net::ERR\u连接被拒绝
。。。我认为这是因为JSON.stringify是V8代码-纯JS阻塞代码。。。它不在事件循环上运行…也许…是的,tnx,nodemon是个问题
// Async callback will called after finish
// Non-Blocking
fs.writeFile(file, data[, options], callback)
// write to file with return the result, may throw exception
// Blocking
fs.writeFileSync(file, data[, options])