2017-12-17 8 views
0

私は、しかし、私は返すことができるようにしたいと思い期待通りのデータうちにconsole.logプリントpromise.all())(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) 
} 

を使用して3つの非同期API呼び出しのデータを返すようにしようとしていますdataオブジェクトまたは理想的には、すべての3つのiterablesを持つ新しいオブジェクトgetAPIs()を呼び出します。私が約束を使用しようとしているのは今回が初めてで、私はデータを返そうとした際にここで欠けている重要な非同期概念があると感じています。

答えて

1

あなたはただ行うことができます。

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] 
    } 
    }); 
} 

ただし、この機能はまだ約束を返しますので、あなたは同期呼び出し側に結果にアクセスするカント。

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

を次のようにあなたは私が価値がgetAPIs' 'から返され得るとき、私は'約束{} '取得しかしこれを試してみましたが、いないオブジェクトが約束 – user3116846

+0

から返さごgetAll方法を変更する必要がありますあなたはそれを呼んだときに何を記録したのですか?あなたの 'console.log'ステートメントを表示してください –

+0

上記の関数とconsole.logステートメントをどのように呼び出すのかを上記で編集しました – user3116846

関連する問題