Сейчас модно писать асинхронный код в виде какого то дерьма из так-называемых коллбэков (я имею в виду пробрасывание из функции в функцию, а-ля CPS). И все ноют, как мол, избавиться от этого говна, изобретают какие то уродливые велосипеды. А между тем, безо всяких велосипедов в JS есть нормальный способ писать асинхронный код, и был всегда, вспоминаем XMLHttpRequest. То есть, не то чтоб совсем без коллбэков, но нормально структуированный, в объектном стиле, как и подобает нормальному ООП-языку. Например:
File={
open: function(fileName){
var o=Object.create(this)
o.file=fileName
return o
},
read: function(){
fs.readFile(this.file, "ascii", this.on())
},
onErr: function(err){console.log(err)}, // default on error
onSuccess: function(data){console.log(data)}, // default on success
on: function(){
return function(err, data){if(err) this.onErr(err); this.onSuccess(data)}.bind(this)},
}
tmp=File.open("tmp.txt")
tmp.read()
tmp=File.open("tmp.txt")
tmp.onSuccess=function(data){console.log("bla-bla-bla\n"+data)}
tmp.read()
// ::: foo
// ::: bar
// :::
// ::: bla-bla-bla
// ::: foo
// ::: bar
Почему этот стиль не прижился?