簡體   English   中英

等待函數完成,然后再if()else()

[英]Wait for a function to finish before if()else()

我有這個:

var myError;

function getNames(user,location){
    myError=null;

    //Make an Ajax Call (this takes some time)
    //On Success do this:
        if(//Some Condition){
            myError=false;
        }else{
            myError=true
        }
}

function first(){
    getNames(user, location);

    if(myError==false){ //MYCONDITION
        //do some custom stuff just for first();
    }else{
        alert("Failed");
    }
}

function second(){
    getNames(user, location);

    if(myError==false){ //MYCONDITION
        //do some custom stuff just for second();
    }else{
        alert("Failed");
    }
}

現在,當我調用first()或second()時,它總是給我警報消息“ FAILED”。 問題在於/// MYCONDITION在getNames()函數完成之前正在執行。 我想等待getNames()執行,然后才能檢查// MYCONDITION。

我無法設置延遲,因為我不知道getNames()將花費多少時間。 我正在考慮使用一些jQquery函數,但似乎找不到一個。

而且,我正在嘗試使getNames()盡可能通用。 因此,我正在考慮一種不打擾getNames()的方法。

我看到的最后一個選項是將callback()添加到getNames()。 但是,該函數也被其他不需要回調()的函數調用。

有什么想法嗎?

謝謝。

添加回調完全沒問題; 您可以檢查它是否存在:

function getNames(user, location, callback){
    myError=null;

    //Make an Ajax Call (this takes some time)
    //On Success do this:
        if(//Some Condition){
            myError=false;
        }else{
            myError=true
        }

        if(callback) {
           callback.apply();
        }
}

如果由於通用性不夠而困擾,則可以讓該函數接受對象而不是參數,因此:

function getNames(options) {
    var user = options.user;
    var location = options.loacation;
    var callback = options.callback;

    myError=null;

    //Make an Ajax Call (this takes some time)
    //On Success do this:
        if(//Some Condition){
            myError=false;
        }else{
            myError=true
        }

        if(typeof callback !== "undefined") {
           callback.apply();
        }
}

當調用getNames ,您可以執行以下操作:

getNames({
    user: "some user",
    location: "some location",
    callback: function() {
        ...
    }
});

要么

getNames({
    user: "some user",
    location: "some location"
});

在jquery中,如果您不喜歡回調(我非常希望您不喜歡:)),那么您很幸運,我的朋友。 $ .ajax()函數中有一個標志,可用於關閉該特定AJAX請求的異步。 下面是代碼示例:

http://api.jquery.com/jQuery.ajax/

var x = 1;
jQuery.ajax({
     url:    'http://example.com/catalog/create/',
     success: function(result) {
                x = 59;
              },
     async:   false
});

console.log(x);    //Should print 59 instead of 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM