|
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, время: 15:25. |
|