2017-04-17 16 views
1

ファイルがバックエンドで作成されています(最大1分)。私はファイルが準備ができているかどうかをチェックする関数を書いたファイルの準備ができている間、待機します

function check_for_file() { 
    $.ajax({ 
    url: '/check/', // check if file exists 
    success: function(data) { 
     location.replace('/hello/'); // redirect to download 
     return true; 
    }, 
    failure: function(data) { 
     alert('Got an error'); 
    } 
    }); 
    return false 
} 

a = check_for_file(); 
} 
// a= false 
// while (a == false) { 
//  a = check_for_file(); 
// } 

console.log(a); 

これはうまくいきます。しかし、私はファイルが準備ができていない間にチェックするループを作る必要があります。私は何をすべきか?

!!!!!!!! 回答の最初のコメントをご覧ください

+1

'= check_for_file();'すぐに戻ります。非同期を実行して結果を返すことはできません。テスト中にafgain関数を呼び出すか、テストファイルがsetTimeoutを使って準備ができていないことを確認してからsetTimeoutを使用して成功/失敗または失敗を表示する方法 - 失敗はエラーではありません。 – mplungjan

答えて

1

a = check_for_file();すぐに返されます。

asyncを実行して結果を返すことはできません。

failureは仕方によってイベントではありません - 成功にafgain関数を呼び出し、エラー/失敗するか、ファイルをテストした後に行うことが呼び出され失敗したり、エラー

成功にsetTimeoutメソッドを使用して準備ができていない/行わまたはあなたが渡す方法に応じて、障害が "まだファイルが見つかりません"

function check_for_file() { 
    $.ajax({ 
    url: '/check/', // check if file exists 
    success: function(data) { 
     if (data.fileExists) { // result from server 
     location.replace('/hello/'); // redirect to download 
     } 
     else { 
     setTimeout(check_for_file,2000); // try again 
     } 
    }, 
    error: function(data) { 
     alert('Got an error'); 
    } 
    }); 
} 
関連する問題