Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Promise polyfill (https://javascript.ru/forum/project/46096-promise-polyfill.html)

Octane 08.05.2014 16:14

Promise уже не ES5, логично предполагать наличие es6-shim, но не составит труда убрать ES6-Object.assign и мозиловские Array generics. Ок, сделаю отдельно, будет только @requires setImmediate.

У меня опыт Nodejs только в составе node-webkit, поэтому особо не суюсь в серверные скрипты.

Octane 08.05.2014 20:45

Хы пока выносил в отдельный репозиторий, нашел различие в поведении нативной реализации в Chrome и Firefox:

var p1 = Promise.resolve(),
    p2 = Promise.resolve();

p1.then(p2).then(function () {
    console.log('Firefox!'); //сработает только в Firefox
});


и что-то не найду, как должно быть, везде описан случай:
var p1 = Promise.resolve(),
    p2 = Promise.resolve();

p1.then(function () {
    return p2;
}).then(function () {
    console.log('Works well!'); //тут оба браузера сработают, но не полифил
});
щас буду исправлять :(

---------------

Отдельный репозиторий Promise не требующий Object.assign и Array generics.
В ноде подключается так:
var Promise = require('es6-promises').Promise;

monolithed 08.05.2014 21:51

Octane,
Крутяк :victory:

nerv_ 08.05.2014 22:14

Цитата:

Сообщение от Octane
Отдельный репозиторий Promise не требующий Object.assign и Array generics.
В ноде подключается так:
var Promise = require('promise').Promise;

спасибо, добрый человек :thanks:

Octane 08.05.2014 22:15

Спасибо)

--------------------------------------
var p1 = new Promise(function (resolve) {
        resolve();
    }),
    p2 = new Promise(function (resolve) {
        resolve();
    });

p1.then(p2).then(function () {
    console.log('Works'); //Aurora 31
}, function () {
    console.log('Error'); //Chrome 36
});
и какому варианту следовать? :D

nerv_ 08.05.2014 22:18

Цитата:

Сообщение от Octane
и какому варианту следовать?

любит, не любит :)

monolithed 09.05.2014 16:01

Octane,
а ты этот проект видел https://github.com/slightlyoff/Promises ?

Octane 09.05.2014 17:38

Я много пересмотрел, в этом какие-то нестандартные Promise.any, Promise.every, Promise.some, Promise.fulfill. Наверное еще по ранним черновикам делал, или сами названия выдумывал. Странно конечно, это же участник ТС39.

monolithed 09.05.2014 17:49

Цитата:

Сообщение от Octane
Я много пересмотрел, в этом какие-то нестандартные Promise.any, Promise.every, Promise.some, Promise.fulfill. Наверное еще по ранним черновикам делали, или сами названия выдумывали.

Ты обратил внимание на то, что они завязываются на process.nextTick || MutationObserver?


Может для this._* сделать неперечисляемыми?
package.json сделаешь? :)

Octane 09.05.2014 18:10

process.nextTick это для старых версий Nodejs, сейчас там встроен global.setImmediate. MutationObserver я хз для чего там, поиск не нашел postMessage, наверное события обсервера используют чтобы асинхронно вызывать функции, ну или хз надо будет внимательнее посмотреть.

установку через npm и bower сделаю, как баг исправлю.

Цитата:

Сообщение от monolithed
Может для this._* сделать неперечисляемыми?

это же придется подменять defineProperty для IE8…


Часовой пояс GMT +3, время: 11:21.