Асинхронность в стиле XMLHttpRequest
Сейчас модно писать асинхронный код в виде какого то дерьма из так-называемых коллбэков (я имею в виду пробрасывание из функции в функцию, а-ля 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 ИМХО, это единственный нормальный вариант, в духе JS. Все остальное — для безмозглых фапе-хипстеров, которые любят обмазаться говном, а потом ищут способы отмыться. Почему этот стиль не прижился? |
Часовой пояс GMT +3, время: 10:17. |