Суть такая, не получается контролировать очередь с указанным параметром. Ниже я пихаю колбеки в очередь queue, по которой могу пройтись либо циклом, либо просто использовать Resolve.all, но когда присутствует параметр, например нужно выполнять не больше двух-трех функци, то не получается дождаться.
Допустим есть асинхронная функция и конструктор:
function asynRequest(result) { // наша асинхронная функция
setTimeout(result, 2000, 'data');
}
function Foo (params) { // наш конструктор
this.count = params.count // число одновременных вызовов
this.queue = []; // наша будущая очередь
this.working = 0; // параметр, который говорит сколько функций обрабатывается
}
Foo.prototype.tick = function (callback) {
this.queue.push(callback); // добавляем
return this;
}
Foo.prototype.resolver = function () {
var vm = this;
this.queue.forEach(function (cb) { // Тут что бы я не делал у меня выходит либо Max call stack либо просто не
получается вернуть проми с результатами.
vm.working++;
});
return Promise.resolve();
}
Foo.prototype.finish = function () {
this.resolver().then(function (response) {
console.log('УРААА!!', response)
});
}
var executor = new Foo({count: 2});
executor
.tick()
.tick()
.tick()
.finish()
Я так понимаю, что я пытаюсь использовать неправильный подход. Может для решения данной задачи есть паттерны, которые найти у меня не получилось.