我正在拨打一个返回书籍集合的网络服务,每个请求都包含一个' MoreItems'标志,指示是否有更多数据要求返回。这是因为Web服务以分页方式返回数据,限制为100,因此客户端必须使用偏移值进行请求。
e.g:
var getBooksFromWebserver = function (param) {
return {
uri: 'https://webservice.com/Books/GetBooks?authorId=' + param.author+ '&offset=param.offset&get=param.get',
method: 'GET',
resolveWithFullResponse: true
}
};
Data: {
Books : [],
MoreData: true
}
对getBooksFromWebserver的调用如下所示:
module.exports.GetBooks = function (data) {
rp(getBooksFromWebserver(data), function(err, response, body) {
if (err) {
}
response.setEncoding(appLibconfig.encoding);
writer.transformAndWrite(data, body);
});
};
我遇到的问题是在继续执行writer.transformAndWrite(data,body)之前,实现一个延迟等待,直到MoreData返回false(所以我知道所有数据都被检索);
因此,它需要迭代getBooksFromWebserver调用,在本地缓存响应以保留每个响应,然后当MoreData为false时,写入数据并清除缓存。
我尝试了各种各样的技术,但我正在努力实现一种有效的模式,任何指导都非常感激。
答案 0 :(得分:0)
代码可能会有所帮助 -
module.exports.GetBooks = function (data) {
var allData = [];
function getBooks() {
rp(getBooksFromWebserver(data), function(err, response, body) {
if (body && body.MoreData == true) {
allData = allData.concat(body); //assuming the data retured in array of objects
getBooks(); //calling again change data for next pagination
}
else {
response.setEncoding(appLibconfig.encoding);
writer.transformAndWrite(data, allData);
}
});
}
};