2017-06-23 2 views
0

各リクエストにデータがあるかどうかを示す 'MoreItems'フラグを含む書籍のコレクションを返すWebサービスを呼び出しています返還請求のためにこれは、Webサービスが100に制限されたページングされた方法でデータを返すため、クライアントはオフセット値を要求しなければならないからです。複数のajax呼び出しですべてのデータが返された後にのみ遅延が解決されました - オフセット/テイク

例:

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

    }); 

}; 

私が午前問題はMOREDATAがfalseを返すまで待機する繰延(ので、私はすべてのデータを知っているを実施していますwriter.transformAndWrite(data、body)に進む前に取得されます。

したがって、getBooksFromWebserverコールを繰り返し、応答をローカルにキャッシュして、各レスポンスを保持し、MoreDataがfalseの場合は、データを書き込み、キャッシュをクリアする必要があります。

私はいろいろなテクニックを試しましたが、動作するパターンを実装するのに苦労しています。

+0

をデータが一緒に一つまたは全てずつのようにページネーション方式で返されますか? – Ayush

+0

データは100のバッチで返されるので、私はのような呼び出しをする必要があります。取得= 100;オフセット= 0、次に取得= 100; offset = 100、unti MoreDataは返信でfalseを返します – Jrand

+0

その後、すべてのデータが 'if(body.MoreData == true) 'を返した後で単純なチェックを行い、それを再度呼び出すことはできません。 – Ayush

答えて

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

ありがとう、確かに非常に役立ちます – Jrand

関連する問題