javascript - Promise<any> fiind convertit într-un ZoneAwarePromise


Folosesc Angular5 în proiectul meu. Am implementat metode în serviciul meu API pentru a returna promisiuni

method(): Promise<any> {
    return new Promise<any>((resolve,reject) => {
        this.http.get(url).subscribe((response) => {
            resolve(response);
        }, (error) => reject(error));
    });
}

În componentă este necesar să se asigure că toate datele au fost preluate înainte de operațiuni suplimentare. Am încercat să fac acest lucru:

const fetch = [];
fetch.push(this.api.method());
fetch.push(this.api.method1());
fetch.push(this.api.method2());

Promise.all(fetch).then(() => alert('data fetched')); 

Nu a ajuns niciodată la alertă. Totul a reușit cu codul 200.

Când am pauzat execuția la linia cu Promise.all, am văzut că Promisiunile mele au fost convertite în ZoneAwarePromise.

Funcționează bine când doar le leg între ele, imbricând apelurile în .then(s)

De ce a fost convertit Promise? Cum să facem să funcționeze Promise.all?

Răspuns #1

Ce părere ai despre a folosi forkJoin în loc de Promise.all? făcând ceva de genul:

forkJoin(...fetch.map(yourPromis(url)))