Динамически связанные / иерархические Обещания - PullRequest
0 голосов
/ 17 января 2019

Как можно разрешить динамическое число обещаний в последовательности? Как и в случае, дождитесь того, что будет сделано, прежде чем позвонить.

По сути, я хочу, чтобы они вызывались синхронно, но я не могу использовать await / async в моей среде

Это то, что я пробовал до сих пор, но это работает только с первым и последним вызываемым:

class MyClass{
    constructor(t){
    this.time = t
  }
  load(){
    return new Promise(resolve => {
        setTimeout( () => {
        console.log(this.time);
        resolve(this.time);
      }, 1000/this.time)
    })
  }
}

let pChain;
for(i=1; i<5; i++){
    if(!pChain){
    pChain = new MyClass(i).load();
  }else{
    pChain = pChain.then( t => new MyClass(i).load())
  }
}

pChain.then();

1 Ответ

0 голосов
/ 17 января 2019

Ты очень близко. У вас просто ошибка в вашем счетчике циклов. Изменить это:

for(i=1; i<5; i++){

к этому:

for(let i=1; i<5; i++){

С вашим существующим кодом, i неявно превращается в глобальный var. Ваш код проходит, настраивая цепочку обещаний. Затем, когда обещания начинают разрешаться, i теперь равно 5, и поэтому все, кроме первого обещания, в конечном итоге используют 5 вместо ожидаемого числа.

Если вместо этого вы используете let, то каждый раз через цикл будет новая привязка переменной. Таким образом, каждый вызов MyClass (i) будет видеть свой собственный правильный номер.

...