2017-08-05 49 views
1
function buyabook(bookTitle) { 
    var status = document.getElementById("status"); 
    if (status == "unregistered") { 
     //alert("unregistered"); 
     alert("Please log in before purchasing a book!"); 
     login_prompt(); 
    } 

    function login_prompt() { 
     document.getElementById("login_prompt").src = "http://uni.database.ac.nz/BC/Closed/Service.svc/user"; 
     login(); 
    } 

    function login() { 
     alert("last"); 
    } 

的問題是該行JavaScript函數按錯誤順序執行?有關異步的東西?

document.getElementById("login_prompt").src = 
"http://uni.database.ac.nz/BC/Closed/Service.svc/user"; 

執行最後一次。我希望它登錄alert..or任何其他事情,我想在登錄功能做之前執行..林不知道如何解決這個問題..:\

+2

?? ??如何移動'login_prompt()'函數調用一條線,使其在** alert()調用之前而不是之後? – Pointy

+0

你調用它的最後一個函數,所以不應該最後運行?我在這裏沒有看到任何異步代碼。 – Carcigenicate

+0

你在哪裏允許用戶實際輸入登錄憑證? – trincot

回答

-3

JavaScript一次處理所有的代碼,所以如果你有任何相互依賴的函數或變量,並且想指定一個訂單,你需要將它們包裝在一個Promise中回電話。

像get,post,delete等Http方法是異步的,這意味着它們需要時間來收集數據,任何依賴它們的函數都必須在承諾或回調後調用。

一些很好的閱讀材料:

https://www.pluralsight.com/guides/front-end-javascript/introduction-to-asynchronous-javascript

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

+2

發佈的代碼中沒有異步方法。 – Pointy

+1

該操作提到異步,所以我給他一些關於異步的材料。他正在改變可能指向i幀的文檔的src,如果情況如此,異步將影響調用的順序。當你沒有看到整個代碼時,你不能說沒有異步。改變指向外部資源的src是異步的。 – user8421818

-1

我會說,如果你想先運行它使警報之前調用login_prompt。 function login() { login_prompt() alert("last"); }

+0

'login_prompt'已被首先調用。 – trincot

+0

我認爲那麼你的條件是不正確的,所以它沒有得到執行之前,你的登錄功能。 –

+0

檢查條件...是真的...控制一些虛擬文本... –