如果我需要按顺序调用3 http API,那么除了以下代码之外,还有什么更好的替代方法:

http.get({ host: 'www.example.com', path: '/api_1.php' }, function(res) { 
  res.on('data', function(d) { 

    http.get({ host: 'www.example.com', path: '/api_2.php' }, function(res) { 
      res.on('data', function(d) { 

        http.get({ host: 'www.example.com', path: '/api_3.php' }, function(res) { 
          res.on('data', function(d) { 


          });
        });
        }
      });
    });
    }
  });
});
}

推荐答案

使用像Futures这样的延迟.

var sequence = Futures.sequence();

sequence
  .then(function(next) {
     http.get({}, next);
  })
  .then(function(next, res) {
     res.on("data", next);
  })
  .then(function(next, d) {
     http.get({}, next);
  })
  .then(function(next, res) {
    ...
  })

如果你需要传递范围,那么就这样做

  .then(function(next, d) {
    http.get({}, function(res) {
      next(res, d);
    });
  })
  .then(function(next, res, d) { })
    ...
  })

Node.js相关问答推荐

购物车是空的状态|本地存储不更新产品数量|Redux|

对于具有重叠列的组合键,在冲突&q;上没有唯一或排除约束匹配错误

关于Node.js中的AES加密库的问题

后端如何保护数据不被用户提取其他用户的数据?

遇到 - TypeError:try 使用 Express(Node.js) 从 JSON 文件访问数据时无法读取未定义的属性(读取帖子)

如何在mongoose 聚合中执行全文搜索

使用正则表达式查找文档,但输入是数组

Zod 模式中的self 数组

使用 Node.js 在 MongoDB 中搜索

这到底是什么';拒绝未经授权';对我来说是什么意思?

如何在 Node.js 的 console.log() 中创建换行符

分块 WebSocket 传输

npm publish 导致'错误:EPERM:不允许操作,取消链接...',errno -4048

如何在 NodeJs 中下载和解压缩内存中的 zip 文件?

Node.JS 中的基本 HTTP 身份验证?

Nodejs续集批量更新

node.js 中存储的模块变量在什么范围内?

如何使用 cookie 创建 HTTP 客户端请求?

Node.js 中的 Streams3 是什么,它与 Streams2 有何不同?

Npm postinstall 仅用于开发