2017-08-05 70 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

检查条件...是真的...控制一些虚拟文本... –