2017-10-24 1 views
0

Ich versuche, die Werte einer Array-Liste nach dem Ausführen der for-Schleife zu verwenden.warten Sie die Ausführung von foreach in ionic weiter 2 weiter

Mein Problem ist, dass, wenn ich meine Anwendung ausführen, es die nächsten Funktionen ausführt, ohne dass ich warten Schleife

Das ist mein TS-Code ist,

convertToPDF(){ 
    let loader = this.loadingCtrl.create({ 
     content: "Generating..." 
    }) 
    loader.present().then(_=>{ 
     this.TempNotesImagesList.forEach(n=>{ 
      this.convertToDataURLviaCanvas(n.url, "image/jpeg").then(base64Img => { 
       this.images.push(base64Img); 
      }); 
     }) 
    }).then(_=>{ 
     loader.dismiss(); 
     console.log(this.images); //Check images 
     this.createPdfX(); //convert to PDF :D 
    }); 

} 
+0

, so dass Sie in Serie asynchron ausgeführt werden soll, nicht parallel ... versuchen einfach Versprechen –

+0

Verkettungs ist 'this.images' wirklich brauchen alle Bilder? –

Antwort

2

Haben Sie den convertToDataURLviaCanvas müssen in Reihe laufen oder parallel?

Serie:

convertToPDF() { 
    let loader = this.loadingCtrl.create({ 
     content: "Generating..." 
    }); 
    loader.present() 
    .then(_ => this.TempNotesImagesList.reduce((p, n) => p.then(_ => this.convertToDataURLviaCanvas(n.url, "image/jpeg").then(base64Img => { 
     this.images.push(base64Img); 
    })), Promise.resolve())).then(_ => { 
     loader.dismiss(); 
     console.log(this.images); //Check images 
     this.createPdfX(); //convert to PDF :D 
    }); 
} 

Parallel:

convertToPDF() { 
    let loader = this.loadingCtrl.create({ 
     content: "Generating..." 
    }); 
    loader.present() 
    .then(_ => Promise.all(this.TempNotesImagesList.map(n => this.convertToDataURLviaCanvas(n.url, "image/jpeg").then(base64Img => this.images.push(base64Img))))) 
    .then(_ => { 
     loader.dismiss(); 
     console.log(this.images); //Check images 
     this.createPdfX(); //convert to PDF :D 
    }); 
} 
+0

Endlich wusste ich, wie man das macht .. danke an v.much .. ich kannte die Lösung einfach nicht so –