|
Promise polyfill
Тут задавали вопрос, что внутри Deferred, а еще нативная поддержка Promise появилась в браузерах. Чтобы окончательно разобраться в «обещаниях», решил свой полифил написать
ES6 Promise polyfill на GitHub, для работы требуется setImmediate. Реализовано поведение, максимально похожее на native Promise в Chrome и Aurora. Можно использовать в Nodejs:
var Promise = require('es6-promises');
Установка: Bower bower install promises npm npm install es6-promises |
По поводу полифилов. Ты зачем перезаписываешь свойства:
Object.keys = Object.keys || function().. Это вобще дикость какая-то: Object(object) !== object Кстати, может кто пояснить, в каком стандарте писаны методы Array.slice и прочие? |
Цитата:
|
Добавлю ссылок:
An open standard for sound, interoperable JavaScript promises—by implementers, for implementers MDN Promise --- Object(this).constructor !== Promise // -> isPromise(object) - такие штуки тоже не люблю var results = Array(promises.length); на мой взгляд new надо писать для наглядности - ну и по возможности я бы запихнул функции function nextResolve(data) { function nextReject(error) { function resolve(data) { function reject(error) { в прототип как приватные (чтобы не создавались каждый раз) - а в целом выглядит симпатично :) Еще я вспомнил, что у тебя была тема про асинхронность. Так вот setImmediate там бы вписалась очень хорошо) --- Цитата:
Цитата:
--- GOD, пошел отсюда далеко и надолго :) |
Цитата:
Цитата:
В Aurora 29
Array.slice.toString()
"function slice() {
[native code]
}"
Цитата:
Object(object) === object стандартная проверка, сто лет так делаю, до этого никто не удивлялся :)http://kangax.github.io/es5-compat-table/ http://kangax.github.io/es5-compat-table/es6/ http://kangax.github.io/es5-compat-table/non-standard/ http://people.mozilla.org/~jorendorf...ototype-object не нахожу здесь Object.isObject или чего-то подобного, в глобале создавать такую функцию не хочу, а с неймспейсом запись не намного короче будет. Мне больше нравится запись if (Object(arg).length), чем if (isObject(arg) && arg.length).Object.is не подходит, потому что Object.is(null, null) → true. Поэтому не вижу особой необходимости создавать isObject для полифила, в библиотеке или фреймворке — без проблем.Цитата:
this.constructor, потому что в strict режиме this может быть undefined.Да isPromise добавлю, думаю ни один раз понадобится, там надо разобраться, что происходит, когда в дженерики promise передают. Или на this instanceof Promise заменю.Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
typeof null → "object". Обсуждали как этот вариант лучше пропускать. В prototype.js полно таких проверок. |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 13:35. |
|