1

リクエスト全体の終了を待たずに部分的な結果を得るために、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);
});
};

私が理解していないのは、「while ループ」を「if 条件」で変更するとすべてが機能するのに、「while」を使用すると無限ループに入る理由です。部分的な要求 -> 応答を待つ - > 応答を処理する -> 次の要求に従う?

4

1 に答える 1

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

また、部分的なリクエストを行う - >応答を待つ - >応答を処理する - >次の要求に従うのは正しい方法ですか?

そうしない理由がわかりません。

于 2013-09-05T13:39:38.240 に答える