如何在node.js中管理一系列API调用

如何在node.js中管理一系列API调用,node.js,asynchronous,httprequest,async.js,Node.js,Asynchronous,Httprequest,Async.js,我有一系列API端点,为了建立规范列表,我需要对这些端点进行一系列轮询: /cities /homes /parcelvalue 因此,轮询/cities会给我一个城市列表,轮询/homes会给我一个给定城市中所有地址的列表,轮询/parcelvalue会给我给定家庭的值 最后,我将构建一个文件树,将轮询每个端点的增量输出保存到一个目录中,以便进行审计: | \-cities/cities.json | \-homes/homes.json | \-parcelvalue/parcelvalu

我有一系列API端点,为了建立规范列表,我需要对这些端点进行一系列轮询:

/cities
/homes
/parcelvalue
因此,轮询
/cities
会给我一个城市列表,轮询
/homes
会给我一个给定城市中所有地址的列表,轮询
/parcelvalue
会给我给定家庭的值

最后,我将构建一个文件树,将轮询每个端点的增量输出保存到一个目录中,以便进行审计:

|
\-cities/cities.json
|
\-homes/homes.json
|
\-parcelvalue/parcelvalue.json
因此,
cities.json
/cities
enpoint的原始输出,
homes.json
包含对
cities.json
中每个城市的
/homes
端点进行轮询的结果,而
parcelvalue.json
包含对
homes.json
中每个家庭的
/parcelvalue
端点进行轮询的输出。我希望每个步骤都依赖于磁盘I/O,以便构建
homes.json
的函数从
cities.json
文件开始

我所能看到的最简单的方法是每一步都做一次。同步加载可能通知它的文件,2。同步轮询相应的端点,然后选择3。同步保存每个函数可能生成的文件:

getCities()
函数可能会检查是否存在
cities.json
,并从端点生成该文件。如果不存在,则
getHomes()
函数可能会导入
cities.json
,然后轮询列表中每个城市的
/homes
端点,然后生成
homes.json
,而
getParcelValues()
函数可能会导入
homes.json
,然后轮询列表中每个home的
/parcelvalue
端点,然后生成
parcelvalue.json

(这是一个简化,我想通过函数过滤和错误处理等来添加,但我试图保持这个示例的重点。)

不幸的是,今天晚上对同步http请求库的彻底检查并没有产生任何在我的情况下有效的结果


是否有一种很好的方法可以使用类似或其他类似的异步工作流库,即异步库?我希望这些函数中的每一个都能被串联调用,
getCities()
->
getHomes()
->
getParcelValues()
,并尽可能多地进行封装。

尝试以下方法:

var async=require('async')

    async.auto({
        cities : function(cb) {
    //do your stuff ...
            if (err)
                cb(null, false);
            else 
                cb(null, result);
        },
        homes : ['cities', function(cb, result) {
            if(!result.cities)
                cb(null, false)
            else {
                // do your stuff
                if (err)
                    cb(null, false);
                else 
                    cb(null, homeResult);
            }
        }], 
        parcels : ['homes', function(cb, result) {
            if(!result.homes)
                cb(null, false)
            else {
                // do your stuff
                if (err)
                    cb(null, false);
                else 
                    cb(null, parcelResult);
            }
        }]
    },function(err, allResults){
        //do final works
    });