仅在多个ajax调用返回所有数据后才解决延迟 - offset / take

时间:2017-06-23 10:53:55

标签: javascript node.js asynchronous

我正在拨打一个返回书籍集合的网络服务,每个请求都包含一个' 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时,写入数据并清除缓存。

我尝试了各种各样的技术,但我正在努力实现一种有效的模式,任何指导都非常感激。

1 个答案:

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