javascript函数执行顺序错误?关于异步的事情?

时间:2017-08-05 15:12:15

标签: javascript html asynchronous operator-precedence

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

问题在于行

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

执行最后..我希望它在登录警报之前执行..或者我想在登录功能中执行的任何其他事情..我不知道如何解决这个问题..:\

2 个答案:

答案 0 :(得分:-1)

如果你想先运行它,我会说在发出警报之前调用login_prompt。  function login() { login_prompt() alert("last"); }

答案 1 :(得分:-3)

JavaScript会同时处理所有代码,因此,如果您有任何相互依赖的函数或变量,并且想要指定一个订单,则需要将它们包装在Promise或回调函数中。

诸如get,post,delete等的Http方法是异步的,这意味着它们需要时间来收集数据,任何依赖它们的函数必须在promise或回调之后调用。

一些好的阅读材料:

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