2017-09-13 1 views
0

J'ai 2 services qui renvoient 2 promesses, le premier service renvoie une liste d'objets, le second renvoie les détails pour chaque objet en fonction de l'identifiant. Je dois donc appeler service2 pour chaque objet renvoyé à partir de service1. Les données chargées seront enregistrées dans un tableau;Données mixtes issues de deux promesses

C'est la façon que je mis en œuvre, mais ne fonctionne pas

objects: object[]; 

service1.then(res => 
    objects = res.data; 
    objects.forEach(obj => 
     loadService2(objId,(dtObj) => {obj = dtObj}) 
    ) 
); 

loadService2(obj: object, callback: (detailsObject: DtlObject) => void){ 
    service2.then(res => callback(res.data);); 
} 

Cette solution fonctionne pas. Après j'ai encore le tableau d'objets sans détails.

Répondre

1

Essayez ce code:

objects: object[]; 

service1.then(res => 
objects = res.data; 
objects.forEach(obj => 
    loadService2(objId).then((dtObj) => { 
     obj = dtObj 
    }) 
) 
); 

loadService2(obj: object) => void){ 
return service2(obj) 
} 

Si cela ne fonctionne pas

service1.then(res => 
objects = res.data; 
let promiseses = objects.map(obj => 
    return loadService2(obj.objId)); 

Promise.all(promises).then(data => { 
    objects = data; 
}) 
); 

loadService2(obj: object) { 
    return service2(obj) 
}