#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 одновременно. Спасибо, что кто-нибудь пытался решить