Комментарии 9
Код у вас получился весьма сложночитаемый, я поленился в него вникать, извините.

Пример использования мне показался притянут за уши. Было бы интересно вычисления выполнять в WebWorker'е, тогда асинхронность будет оправдана.

Но зачем все это, если есть промисы? Пример с использованием каррированных функций:

```js
Promise
.resolve( [ 1.1, 5.4, 8.3, 2.7, 4.9, 4.4, 7] )
.then(mapAsync(plus(3)))
.then(filterAsync(greater(3)))
/*… */
```
Промисы – это дело предпочтений и знаний, мои остановились на колбэках. Про webworker-ы говорят, что они не имеют доступа к DOM, а так хочется.

Вероятно, когда-нибудь переделаю свой код, чтобы он мог жевать промисы, рассовывать цепочки по worker-ам, читать мысли… но пока я лишь доказал для себя свою маленькую идею.

А пример на числах для упрощенного восприятия вычислений в консоли.
А какова должна быть практическая польза от этого дела. Еще не совсем понятно само определение «утечек», что это?

P.S. Что-то мне подсказывает, что на самом деле вам нужны Observables — действительно мощнецкий инструмент для борьбы с асинхронностью. Посмотрите в сторону RxJS/xstream/most.js. Или я что-то упустил? :)
Пользы пока пренебрежимо мало, мой код работает только с массивами. А «утечка» – стандартный эффект неспособности сборщика мусора вытравить ненужное.

Как мне показалось, rxjs, xstream, stream работают с единичными значениями. Для обработки массива по соответствующим массиву принципам нужно дописывать что-то внутри или снаружи этих библиотек. А mostjs уж очень «функциональнен», сходу толком не разобрал, но опять же – не массивы.

В целом, обсерверы – те же события, а события – это колбэки, назначаемые из другого места, которое считают правильнее.
hithim
Они работают с единичными значениями «over time» — то есть, с течением времени. Вот и асинхронность. Никто не мешает сделать поток из массива и разом пустить его через цепочку операторов стрима. Получится своего рода «асинхронный массив» (хотя и не совсем, но результат, как мне кажется, будет именно тот, что нужен).

Тут, собственно, весь вопрос сводится к тому, что именно вы хотите делать с массивами с практической точки зрения?
Свернуть через удаленный ресурс, например.

Конечно же, методов понадобится побольше, бэкенд нужно подготовить для такого и обеспечить транспортировку данных. Важно же то, что завязка на массив – пусть и малая часть всей логики – может быть учтена, а не создана вновь.

Не понятно как в этом коде обрабатывать ошибки, видится что никак.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.