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

时间:2014-11-15 09:36:46

标签: node.js asynchronous httprequest async.js

我有一系列API端点,我需要连续轮询以构建规范列表:

/cities
/homes
/parcelvalue

以便轮询/cities为我提供城市列表,轮询/homes会为我提供给定城市中所有地址的列表,并且轮询/parcelvalue会给我一个给定值的值家。

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

|
\-cities/cities.json
|
\-homes/homes.json
|
\-parcelvalue/parcelvalue.json

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

我能看到的最简单的方法是通过每一步1.同步加载可能通知它的文件,2。同步轮询适当的终点,然后3.同步保存每个函数的文件可能会产生:

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

(这是一个简化,我想添加按功能过滤和错误处理等,但我试图保持这个例子的重点。)

不幸的是,今晚彻底检查同步http请求库并没有导致任何在我的情况下都能正常工作。

有没有一种方法可以使用像async.series或其他类似的异步工作流库来使用,即异步request库?我希望能够串联调用这些函数中的每一个,getCities() - > getHomes() - > getParcelValues(),并尽可能地封装。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

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