2017-12-14 23 views
0

私はローカルDBにデータを同期させるAPIを使っています。同期バッチがデータの送信を開始できるようになるまで、再帰的に呼び出すsyncReady APIがあります。再帰が正しく機能し、.thenコールバックが呼び出されますが、解決関数は決して応答を解決しません。 「:{「; 0 pagesTotal}」応答が、RES(応答)がチェーンダウン応答を送信することはありません。私は497がログに記録され、レスポンス」を取得Node.JS再帰的約束が解決しない

const request = require('request-promise'); 
const config = require('../Configs/config.json'); 

function Sync(){} 

Sync.prototype.syncReady = function (token, batchID) { 
    return new Promise((res, rej) => { 
     config.headers.Get.authorization = `bearer ${token}`; 
     config.properties.SyncPrep.id = batchID; 
     request({url: config.url.SyncReady, method: config.Method.Get, headers: config.headers.Get, qs: config.properties.SyncPrep}) 
      .then((response) => { 
       console.log(`The Response: ${response}`); 
       res(response); 
      }, (error) => { 
       console.log(error.statusCode); 
       if(error.statusCode === 497){ 
        this.syncReady(token, batchID); 
       } else rej(error); 
      } 
     ); 
    }); 
}; 

私は、チェーン全体に沿ってconsole.logメッセージを追加しました。チェインの背後にある.then関数のどれも発砲していません。

これを十分に説明していただければ幸いです。約束が解決されない理由は何ですか?

ありがとうございます!

答えて

2

まず、約束を返すものをnew Promiseで囲む必要はありません。第二に、あなたのエラーの場合、それが497であれば約束を解決しません。

const request = require('request-promise'); 
 
const config = require('../Configs/config.json'); 
 

 
function Sync(){} 
 

 
Sync.prototype.syncReady = function (token, batchID) { 
 
     config.headers.Get.authorization = `bearer ${token}`; 
 
     config.properties.SyncPrep.id = batchID; 
 
     return request({url: config.url.SyncReady, method: config.Method.Get, headers: config.headers.Get, qs: config.properties.SyncPrep}) 
 
      .then((response) => { 
 
       console.log(`The Response: ${response}`); 
 
       return response; 
 
      }) 
 
      .catch((error) => { 
 
       console.log(error.statusCode); 
 
       if(error.statusCode === 497){ 
 
        return this.syncReady(token, batchID); 
 
       } else { 
 
        throw error; 
 
       } 
 
      }) 
 
    ); 
 
};

たぶん、上記のようなものではなく、あなたのために動作します。代わりに上記を試してみてください。一般的には、Promiseを返すことがほとんどです。

+0

ありがとうございました! 497を解決することは、チェーンを解決する鍵でした。 res(this.syncReady(token、batchID)); – DrFiasco

+0

本当に、私はあなたがする必要があるのは約束そのものを返すだけなので、別の約束を約束することを約束することです。 – Goblinlord

関連する問題