Как я могу исправить проблему с параллельными запросами в NodeJS здесь?

#javascript #node.js #es6-promise

#javascript #node.js #es6-обещание

Вопрос:

В курсе node преподаватель реализует класс с именем promisequeue для обработки определенного количества запросов одновременно, и вот класс

 class PromiseQueue{
        constructor(promises = [], num = 1){
            this.concurrent = num;
            this.total = promises.length;
            this.todo = promises;
            this.running = [];
            this.complete = [];
        }
        graphTasks(){
            var {todo , running, complete} = this;
            logUpdate(`
            
                todo=${todo.map(toX)}
                running=${running.map(toX)}
                complete=${complete.map(toX)}
            `)
        }
        get runAnother(){
            return this.running.length < this.concurrent amp;amp; this.todo.length > 0
        }
        run(){
            while(this.runAnother){
                const promise = this.todo.shift();
                this.running.push(promise)
                promise.then(() => {
                    this.complete.push(this.running.shift())
                    this.graphTasks();
                    this.run();
                })
                this.graphTasks()
            }
        }
    }
  

Мой вопрос: предположим, что мы добавляем к этому 2 обещания одновременно. затем выполняется второе обещание, разрешенное первым, но в этой строке

 this.complete.push(this.running.shift())

  

это добавит первое обещание к this.complete, хотя оно еще не решено
Это ошибка или я что-то пропустил

Ответ №1:

Я понял это. Если бы второе обещание было выполнено первым, первое было бы выполнено this.complete во время выполнения, а третье было бы добавлено к this.running . итак, у нас есть один, который все еще выполняется в this.complete, и один в this.running, которые гарантируют, что у нас есть только 2 одновременно. Спасибо, что кто-нибудь пытался решить