Jas*_*Jas 9 javascript asynchronous node.js zalgo
在我正在阅读的伟大着作中,NodeJs design patterns我看到以下示例:
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);
});
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
function createFileReader(filename) {
var listeners = [];
inconsistentRead(filename, function(value) {
listeners.forEach(function(listener) {
listener(value);
});
});
return {
onDataReady: function(listener) {
listeners.push(listener);
}
};
}
Run Code Online (Sandbox Code Playgroud)
和它的用法:
var reader1 = createFileReader('data.txt');
reader1.onDataReady(function(data) {
console.log('First call data: ' + data);
Run Code Online (Sandbox Code Playgroud)
作者说,如果项目在缓存中,则行为是同步的,如果不在缓存中则是异步的.我很好.然后他继续说我们应该同步或异步.我很好.
我不明白的是,如果我采用异步路径,那么当var reader1 = createFileReader('data.txt');执行此行时,异步文件读取是否已经完成,因此侦听器将不会在尝试注册它的以下行中注册?
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |