javascript - 从 promise.all() 返回数据

标签 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,我觉得我在尝试返回数据时缺少一个关键的异步概念。

最佳答案

你可以这样做:

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

但是,这个函数仍然返回一个 promise ,所以你不能在调用者中同步访问结果。

你需要修改你的getAll方法如下

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

关于javascript - 从 promise.all() 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47854696/

相关文章:

javascript - extjs 4.2.1 - storemanager.lookup 返回未定义

javascript - codemod/transform 包括 BlockStatement

selenium - 在 webdriver.WebElement 上的 findElements 之后调用 findElement 时出错(使用 Protractor、JS)

javascript - 使用 Promise async/await 未定义

javascript - 如何从 Angular 7 中的另一个组件更新 View ?

javascript - 创建根(...): Target container is not a DOM element in React Test file

javascript - Jquery - 加载动画问题

javascript - 在单个 Javascript 函数中处理多个 websocket 订阅,但只处理一个连接对象

javascript - 创建一个已解决的 A+ promise

javascript - 我怎样才能让 redux 派发一个 Action 并返回一个 promise ?