我有一系列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.json
,getParcelValues()
函数可能导入homes.json
,然后轮询每个/parcelvalue
端点回到列表中,然后生成parcelvalue.json
(这是一个简化,我想添加按功能过滤和错误处理等,但我试图保持这个例子的重点。)
不幸的是,今晚彻底检查同步http请求库并没有导致任何在我的情况下都能正常工作。
有没有一种方法可以使用像async.series或其他类似的异步工作流库来使用,即异步request库?我希望能够串联调用这些函数中的每一个,getCities()
- > getHomes()
- > getParcelValues()
,并尽可能地封装。
答案 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
});