Изменения

Перейти к: навигация, поиск

ECMAScript и все-все-все

1555 байтов добавлено, 18:08, 10 октября 2016
Нет описания правки
</source>
=== Поддержка Promise @@ ==={{blue|Это уже не ES6 (2015), а 2016-2017; но Babel всё равно их поддерживает (и транслирует в генераторы).}}
{{red|Однако, все библиотеки должны поддерживать такое API (колбэки надо обернуть).}}==== Поддержка Promise @@ ====
API с колбэками надо оборачивать. Это нетрудно, но надо знать, куда ставить колбэк: <source lang="javascript">function wrap(fn, ...args){ return new Promise(function(resolve, reject) {blue|Это уже не ES6 try { fn(2015resolve, ...args); } catch (e) { reject(e); } });}async function test(){ await wrap(setTimeout, а 2016-2017500); но Babel всё равно их поддерживает }</source> ==== Нюансы с исключениями @@ ==== {{red|Нюанс 1: Promise'ы глотают исключения}} Решение — [http://bluebirdjs.com Bluebird], он бросает '''Unhandled rejection error''' {{red|Нюанс 2: У асинхронных исключений нет вменяемого стека.}} Стеки в духе:<pre> at Connection.parseE (node_modules/pg/lib/connection.js:554:11) at Connection.parseMessage (node_modules/pg/lib/connection.js:381:17) at Socket.<anonymous> (node_modules/pg/lib/connection.js:117:22) at emitOne (events.js:77:13) at Socket.emit (events.js:169:7) at readableAddChunk (_stream_readable.js:146:16) at Socket.Readable.push (_stream_readable.js:110:10) at TCP.onread (net.js:523:20)</pre> Решение — опять-таки Bluebird + <tt><nowiki>Promise.config({ longStackTraces: true })</nowiki></tt>. ==== gen-thread @@ ==== * Ну, или забить пока на промисы* Юзать генераторы и транслирует мой [https://github.com/vitalif/gen-thread gen-thread] (в генераторыпромисы он тоже умеет<source lang="javascript">yield gen.}}p(<PROMISE>);</source> ''Но в итоге, конечно, все перейдут на Promise.''
=== Template strings @@ ===

Навигация