2017-04-17 123 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

'A = check_for_file();'將立即返回。您不能運行異步並返回結果。在失敗時調用函數afgain或者在測試文件沒有準備好時使用setTimeout在成功/完成或失敗後調用函數,具體取決於您如何顯示失敗 - 失敗不是順便說明的事件 - 它被稱爲失敗或錯誤 – mplungjan

回答

1

a = check_for_file();將立即返回。

您不能運行異步並返回結果。

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