我正在尝试使用偏移量变量拆分API请求,以便在不等待整个请求结束的情况下获得部分结果。 基本上我为前100个值发出API请求,然后我再增加100个值直到结束。偏移只是起点。
/*Node.js connector to Context.io API*/
var key = xxxxxx;
var secret = "xxxxxxxxx";
var inbox_id = "xxxxxxxxx";
var end_loop = false;
var offset = 6000;
/*global ContextIO, console*/
var ContextIO = require('contextio');
var ctxioClient = new ContextIO.Client('2.0', 'https://api.context.io', { key: key, secret: secret });
while(end_loop === false) {
contextio_request(offset, function(response){
if (response.body.length < 100) { console.log("This is the end "+response.body.length); end_loop = true; }
else { offset += 100; }
console.log("Partial results processing");
});
};
/* Context.io API request to access all messages for the id inbox */
function contextio_request(offset, callback) {
ctxioClient.accounts(inbox_id).messages().get({body_type: 'text/plain', include_body: 1, limit: 100, offset: offset}, function (err, response) {
"use strict";
if (err) {
return console.log(err);
}
callback(response);
});
};
我不明白为什么如果我用“if条件”改变“while循环”,一切正常,但是“while”它进入一个无限循环“。另外,它是正确的方法吗?提出部分请求 - &gt;等待回复 - &gt;处理回复 - &gt;跟随下一个请求?
答案 0 :(得分:1)
while循环几乎无限期地调用contextio_request()
,因为这会产生一个不会立即返回的异步调用。
更好的方法是编写一个调用contextio_request()
的递归方法,在该方法中检查响应体长度是否小于100.
基本逻辑:
function recursiveMethod = function(offset, partialCallback, completedCallback) {
contextio_request(offset, function(response) {
if (response.body.length < 100) {
completedCallback(...);
} else {
partialCallback(...);
recursiveMethod(offset, partialCallback, completedCallback);
}
});
};
此外,是否提出部分请求的正确方法 - &gt;等待回应 - &gt;处理响应 - &gt;按照下一个要求?
我认为没有理由不这样做。