2017-08-05 5 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を変更しています。そうであれば、asyncは呼び出しの順序に影響します。コード全体を見ていないときに非同期がないと言うことはできません。外部リソースを指すsrcを変更すると、非同期です。 – user8421818

-1

私はあなたが最初にそれを実行したい場合には、警告を行う前にlogin_promptを呼ぶと言うだろう。 function login() { login_prompt() alert("last"); }

+0

'login_prompt'はすでに最初に呼び出されています。 – trincot

+0

あなたの条件が真ではないので、あなたのログイン機能の前に実行されていないと思います。 –

+0

条件をチェックする...それは本当ですか...いくつかのダミーテキストをコンソール... –

関連する問題