2017-01-27 17 views
0

*編集:この問題につながるセロリのバグが見つかりました。だから、それはJavaScriptコードの一撃とは無関係です。この質問を閉じることを提案する。FlaskのWebサーバーで6分後にjavascriptの「setTimeout」機能が停止する

私は、このJavascript機能をFlask Webサーバー上で実行しており、これはCeleryタスクのステータスをチェックします。タスクが終了した場合はconsole.logに、それ以外の場合は2秒後に再チェックします。

セロリのタスクが6分以内に終了するとうまく動作します。しかし、6分に当たると、この機能は動作を停止するだけです。タスクがまだバックグラウンドで実行されていると確信しているにもかかわらず、Celeryタスクのステータスが再び更新されることはありません.Javascriptの結果は表示されません。

Flaskのタイムアウト設定ですか?どんな洞察にも感謝します。

function update_progress(status_url) { 
    // send GET request to status URL 
    $.getJSON(status_url, function(data) { 
     if (data['state'] != 'PROGRESS') { 
      if ('result' in data) { 
       console.log(data['result']); 
      } 
      else { 
       // something unexpected happened 
       console.log(data['state']); 
      } 
     } 
     else { 
      // rerun in 2 seconds 
      setTimeout(function() { 
       update_progress(status_url); 
      }, 2000); 
     } 
    }); 
} 
+1

多分見に(データ)はconsole.logを追加しようと '予期しない何かが起こっています'各反復時の生データ。 – Ibu

+0

提案してくれてありがとう、私はこれをしました。データはよく見えます。私は手動でstatus_urlに行って、セロリのタスクが終了した後に正しい結果を得ることさえできます。 –

+1

@Ibuに感謝して、私がセロリの仕事の「正しい結果」をダブルチェックしました。それから、問題が見つかりました。結果はシリアル化できず、$ .getJSONが失敗しました。状況が悪化する原因は、$ .getJSONが黙って失敗したことです。 $ .getJSONを$ .ajaxに置き換えてエラーメッセージを見つけました。(function(){...})fail(function(xhr、status、error){ console.log(xhr、status、error); }) –

答えて

2

代わりにsetIntervalを使用して変数に登録してみることもできます。

const updateInterval = setInterval(function(){ 
update_progress(status_url); 
},2000); 

そしてupdate_progress関数内、else部分を除去し、clearInterval(updateInterval)を追加します。

function update_progress(status_url) { 
// send GET request to status URL 
$.getJSON(status_url, function(data) { 
    if (data['state'] == 'PROGRESS') { 
     return; 
    } 

    clearInterval(updateInterval); 

    if ('result' in data) { 
     console.log(data['result']); 
    } 
    else { 
     // something unexpected happened 
     console.log(data['state']); 
    } 
}); 

}

+0

私の問題は解決しません。しかし、私はあなたのコードが正しい方法であり、より良い練習をすることに同意します。とにかくありがとうございました。 –

+0

申し訳ありません。\それは非常に奇妙な問題です。何も考えられません。 –

+0

$ .getSONを$ .ajaxに置き換えると、バックエンドコードに問題が見つかりました。 $ .getJSONは本当に私を誤解していました。 –

関連する問題