2017-05-05 4 views
0

Ich habe 5 Versprechen, die ich in einer bestimmten Reihenfolge setzen möchte. Aber ich habe viel damit zu tun gehabt, einen Weg zu finden, sie in die richtige Reihenfolge zu bringen. Ich habe Folgendes versucht, was zu einer Reihenfolge von (1-2) -5- (3-4) anstelle von (1-2) - (3-4) -5, oder (3-4) - (1 -2) -5 (auch OK). Der 5. kommt also zu früh, er sollte zuletzt kommen. Ich habe versucht, 1 + 2 + 3 + 4 in ein Array/eine Liste zu setzen, wie Sie unten sehen können, und dann das fünfte Versprechen zu erstellen, indem ich sage, dass ich auf die Ausführung von 1-4 warten soll. Aber die Reihenfolge wird falsch angezeigt, wie gesagt ... Irgendwelche Ideen?Run Promises in einer bestimmten Reihenfolge

this.promises.push(PROMISE1.then(() => { 

    **Code for PROMISE 1** 

    this.promises.push(PROMISE2.then(() => { 

         **Code for PROMISE 2** 

         }) 
    ); 
})); 

this.promises.push(PROMISE3.then(() => { 

    **Code for PROMISE 3** 

     this.promises.push(PROMISE4).then(() => { 

         **Code for PROMISE 4** 

         }) 
     ); 
    })); 

Promise.all(this.promises).then(() => { 

     **Code for PROMISE 5** 

    }); 
+0

Es geschieht, weil zum Zeitpunkt der Ausführung von Promise.all (this.promises), Array enthält nur PROMISE1 und PROMISE2, Verheißungen 3 und 4 werden diesem Versprechen noch nicht hinzugefügt und beeinflussen nicht alles Verhalten. –

Antwort

0

Anstatt den Callback für jedes Versprechen einzubringen, geben Sie das innere Versprechen zurück.

var promises = []; 

promises.push(method1().then(() => { return method2().then(() => { } }); 
promises.push(method3().then(() => { return method4().then(() => { } }); 
Promise.all(promises).then(() => { ... }); 

Hier ist eine Arbeitsprobe:

function delay(time, name) { 
 
    console.log("running", name); 
 
    return new Promise(r => setTimeout(r, time)); 
 
} 
 

 
var promises = []; 
 

 
promises.push(delay(1000, "1").then(() => { 
 
    console.log("1 inner"); 
 
    return delay(500, "1 inner").then(() => console.log("1 inner most")); 
 
})); 
 

 
promises.push(delay(250, "2").then(() => { 
 
    console.log("2 inner"); 
 
    return delay(1000, "2 inner").then(() => console.log("2 inner most")); 
 
})); 
 

 
Promise.all(promises).then(() => console.log("all done!"));

+0

Ich bekomme das auch nicht zur Arbeit ... – MariusJ

+0

Kannst du mir eine MCVE zur Verfügung stellen? –

+0

Es ist eine ziemlich komplexe Anwendung, also das einfachste Beispiel, das ich tun kann, ist das in der Frage Post. Ich habe einen Link zum Projekt auf GitHub, wenn das hilft? – MariusJ

Verwandte Themen