Node.js - 多个异步HTTP请求

3
我刚开始接触Node.js,希望创建一个简单的Node.js应用程序,需要执行以下操作: - 通过http请求/获取一些初始数据, - 使用收到的JSON进行另一组请求(一些可以并行执行,一些需要先执行,接收到的数据将被用于创建有效的URL)。
考虑到Node.js是异步和基于回调的,我想知道如何以最佳方式实现此操作,以便拥有"清晰的代码",不会过多地干扰代码。
谢谢任何提示/指导,Mark

这是一个很主观的事情,但我的看法是使用Promises来组织你的回调代码。 - tadman
看这个 :) https://www.npmjs.com/package/rx - Anthony C
@标记所提供的答案互补且可以很好地协同工作。 - spb
2个回答

2
也许可以看看 Async 库。它有很多内置功能,似乎可以实现您想要的功能。其中一些有用的功能可能是“async.waterfall”和“async.map”。

async.waterfall

async.map


0

虽然这是主观的,但通常使用Promise是正确的选择,因为有原生的Promise:

Native Promise Docs - MDN

对于您的特定问题,我认为npm模块request-promise提供了一些很好的解决方案。它本质上是请求模块的“Promisified”版本:

它将允许您进行GET / POST / PUT / DELETE,并在每个请求后跟随一个.then(),您可以继续执行更多调用,如下所示:

-此代码首先从服务器获取某些内容,然后将其他内容发布到该服务器。

function addUserToAccountName(url, accountName, username, password){
  var options = assignUrl(url); // assignUrl is not in this code
  request
  .get(options) //first get
  .auth(username, password)
  .then(function(res) {
    var id = parseId(res.data, accountName); //parse response
    return id;
  })
  .then(function(id) {
    var postOptions = Object.assign(defaultSettings, {url: url + id + '/users'})
    request.post(postOptions) // then make a post
      .auth(username, password)
      .then(function(response) {
        //console.log(response);
      })
      .catch(function(err) {
        console.log((err.response.body.message));
      })
  })
}

你可以继续使用.then(),无论你从前一个.then()返回什么,都将传递给函数。

Request-Promise


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接