gpt4 book ai didi

node.js - 同一个node.js程序中的异步和同步函数调用

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:17 25 4
gpt4 key购买 nike

在下面的nodejs程序中,input.txt中只有一个字符串“abc”。

var fs = require("fs");
// Asynchronous read
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("Asynchronous read: " + data.toString());
});

// Synchronous read

var data = fs.readFileSync('input.txt');
console.log("Synchronous read: " + data.toString());
console.log("Program Ended");

输出是

Synchronous read: abc
Program Ended
Asynchronous read: abc

现在的问题是,当程序开始执行时,它首先看到异步 readfile 调用并在后台运行“读取 input.txt”的过程,然后服务器看到同步 read 调用并再次开始读取输入.txt。但由于异步调用首先开始读取,当同步函数完成读取 .txt 时,异步函数的回调将被传递到事件循环,并且应该首先执行。

所以第一行输出应该是

Asynchronous read: abc

我哪里错了?

最佳答案

But as the asynchronous call has first started the reading, by the time the synchronous function completes reading the .txt, call back of of asynchronous function would have been passed to the events loop and should have been executed first..

强调的区域是发生误解的地方。回调被传递到回调队列,而不是事件循环。事件循环直到调用堆栈为空之后才会循环,这在同步操作完成之前不会发生。

一旦调用堆栈为空,事件循环就会运行,从回调队列中弹出一个回调并执行它。这就是为什么异步回调发生在同步操作之后而不是之前。

在执行同步操作时无法执行回调,因为在执行同步操作时,事件循环不会循环。

在同步操作发生时,不能执行其他 JavaScript。

关于node.js - 同一个node.js程序中的异步和同步函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31950681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com