2017-12-17 3 views
0

Ich versuche, Daten von 3 async api Anrufe zurückzukehren, um die Daten mit promise.all()Zurückgeben von Daten aus promise.all()

function apiReq1(apiCred){ 
    const rds = new apiCred.RDS(); 
    var request = rds.describeDBInstances(); 
    return request.promise(); 
} 

function getAPIs (apiCred) { 
    return Promise.all([apiReq1(apiCred), apiReq2(apiCred), apiReq3(apiCred)]).then(function(data) { 
    console.log(data[0]) 
    console.log(data[1]) 
    console.log(data[2]) 
    return data 

    // ideal return 
    //myMap.set('bar', data[0]) 
    //.set('foo', data[1]) 
    //.set('baz', data[2]); 
    //return myMap 
    }); 
} 

// Function that is calling getAPIs 
function getAll() { 
    apiCred = getApiCred() 
    page = getAPIs(apiCred) 
    console.log(page) 
} 

Die console.log druckt wie aber erwartete ich möchte in der Lage sein, zurückzukehren das Objekt data oder idealerweise ein neues Objekt mit allen drei Iterablen zu allen Aufrufen getAPIs(). Dies ist das erste Mal, dass ich versuche, Versprechungen zu verwenden, und ich habe das Gefühl, dass es ein Schlüssel-Async-Konzept gibt, das mir fehlt, wenn ich versuche, die Daten zurückzugeben.

Antwort

1

Sie können einfach tun:

function getAPIs (apiCred) { 
    return Promise.all([apiReq1(apiCred), apiReq2(apiCred), apiReq3(apiCred)]).then(function(data) { 
    return { 
     'bar': data[0], 
     'foo': data[1], 
     'baz': data[2] 
    } 
    }); 
} 

Allerdings liefert diese Funktion immer noch ein Versprechen, so dass Sie das Ergebnis in dem Anrufer synchron zugreifen können nicht.

Sie benötigen getAll Methode wie folgt ändern

function getAll() { 
    apiCred = getApiCred() 
    return getAPIs(apiCred).then(page => { 
    console.log(page); 
    //DO YOUR THING 
    }) 
} 
+0

habe ich versucht, dies jedoch, wenn ich den Wert zurück von 'getAPIs' bekommen ich' Versprechen {} 'und nicht das Objekt, das von dem Versprechen – user3116846

+0

Was hast du protokolliert, wenn du es anrufst? Zeige deine 'console.log' Anweisung –

+0

Bearbeitet oben, wie ich die Funktion und die console.log Anweisung anrufe, die – user3116846