从promise.all()返回数据

时间:2017-12-17 11:37:38

标签: javascript promise

我正在尝试使用promise.all()

返回3个异步api调用的数据
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)
}

console.log按预期打印出数据但是我希望能够将data对象或理想情况下的所有三个迭代的对象返回到任何调用getAPIs()。这是我第一次尝试使用promises,我觉得在尝试返回数据时我缺少一个关键的异步概念。

1 个答案:

答案 0 :(得分:3)

你可以这样做:

function reverse(str) {
  let reversed = ''
  for (let char of str) {
    reversed = char + reversed
  }
  return reversed
}

console.log(reverse('hello world'))

但是,此函数仍会返回一个promise,因此您无法同步访问调用者中的结果。

您需要修改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] } }); } 方法,如下所示

getAll