javascript - 无需过多嵌套即可调用多个 API

标签 javascript node.js ecmascript-6 promise

我需要调用多个端点,每次调用都取决于上一次调用的结果。

return http.get('url1')
  .then(response1 => {
     return response1.data
  })
  .then(data => {
    http.get('url2' + data) 
      .then(response2 => {
        return response2.data 
      }) // etc ... until the 'nth url'
  })

它可以嵌套。有没有办法将其展平,也许使用生成器?

最佳答案

promise 是为了扁平化:

return http.get('url1').then(response1 => {
     return response1.data
  }).then(data => {
     return http.get('url2' + data);
  }).then(response2 => {
     return http.get('url3' + response2.data);
  }) // ...etc

如果您的 JavaScript 引擎支持 async/await,则可以在 async 函数中使其更短且更易读:

async function demo() {
    const response1 = await http.get('url1');
    const response2 = await http.get('url2' + response1.data);
    const response3 = await http.get('url3' + response2.data);
    // ...
    return responseN;
}

...然后调用它:

demo().then(response => {
    console.log(response);
    // ...etc
});

关于javascript - 无需过多嵌套即可调用多个 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47102712/

相关文章:

javascript - 函数和主 dom 中的变量是否重新声明?

node.js - Heroku 上的 NPM 私有(private) git 模块

javascript - 使用reduce在Node中求和js文件参数

decorator - 如何使用 aurelia-validate 与对象属性进行验证?

javascript - 在 Javascript 中导出动态名称

javascript - 将 Canvas 转换为 HTML5 中固定大小的图像

javascript - 对象键映射 - 如何暂停迭代

node.js - 是什么导致 amqp.node 从 RabbitMQ 服务器获取 ECONNRESET?

javascript - 简单的 Reduce 函数 - JavaScript

javascript - JavaScript 中的 in 运算符如何与集合一起使用?