синхронная обёртка над асинхронной функцией
в основном nodejs исповедует callback'и, но иногда хочется писать плоско.
var result = f(); Как лучше оборачивать функцию, которая результат передаёт в свой аргумент-callback? чтобы вместо f(function (res) {...my code}); писать var res = syncWrap(f); вижу вот такую штуку https://www.versioneye.com/nodejs/syncwrap/0.0.10 но что всё-таки лучше юзать и как вообще это понимать? Спасибо! |
|
Я использую такую обертку для асинхронной функции request:
function url_get(url){ return request.sync(null,{url: url})[1] } данная функция возвращает тело результата http-запроса. Значение параметров null и [1] можно найти в документации по request и sync единственное условие налагаемое на данную обертку в том, что ее можно вызывать только внутри фибера - особой асинхронной функции, то есть вот так: sync(function(){ . . . var body= url_get(url) . . . }) есть так же одно неудобство, заключающееся в том, что ошибки возникшие внутри фибера не попадают в консоль. Я решаю данную проблему так: sync(function(){ try{ . . . var body= url_get(url) . . . }catch(e){ console.error(e); } }) |
cyber,
Генераторы сами по себе не обеспечивают синхронизацию. Там в основе лежат промисы, генераторы тут вторичны. Можно делать синхронизацию одними промисами, без генераторов, но не наоборот. |
Пример обёртки в промисы:
new Promise(function (resolve, reject) { fs.readFile('myfile.txt', function (err, file) { if (err) { return reject(err); } resolve(file); }); }).then(/* ... */) |
Часовой пояс GMT +3, время: 19:13. |