gpt4 book ai didi

javascript - 在释放 zalgo 的 Node.js 设计模式中,为什么异步路径是一致的?

转载 作者:IT老高 更新时间:2023-10-28 23:27:09 26 4
gpt4 key购买 nike

在我正在阅读的这本好书 NodeJs 设计模式中,我看到了以下示例:

var fs = require('fs');
var cache = {};

function inconsistentRead(filename, callback) {
if (cache[filename]) {
//invoked synchronously
callback(cache[filename]);
} else {
//asynchronous function
fs.readFile(filename, 'utf8', function(err, data) {
cache[filename] = data;
callback(data);
});
}
}

然后:

function createFileReader(filename) {
var listeners = [];
inconsistentRead(filename, function(value) {
listeners.forEach(function(listener) {
listener(value);
});
});
return {
onDataReady: function(listener) {
listeners.push(listener);
}
};
}

及其用法:

var reader1 = createFileReader('data.txt');
reader1.onDataReady(function(data) {
console.log('First call data: ' + data);

作者说,如果项目在缓存中,则行为是同步的,如果不在缓存中,则行为是异步的。我没问题。然后他继续说我们应该同步或异步。我没问题。

我不明白的是,如果我走异步路径,那么当这行 var reader1 = createFileReader('data.txt'); 执行时,异步文件读取不能完成已经,因此监听器不会在尝试注册它的以下行中注册?

最佳答案

JavaScript 永远不会中断函数来运行不同的函数。

“文件已被读取”处理程序将排队,直到 JavaScript 事件循环空闲。

关于javascript - 在释放 zalgo 的 Node.js 设计模式中,为什么异步路径是一致的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36795848/

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