簡體   English   中英

等待函數完成執行

[英]Wait for function to finish execution

我有以下幾點:

function functionA() {
    var myVar = functionB();
    functionC(myVar);
}

functionB需要回答的時間取決於用戶輸入。 可能是1s,也可能是10s。 所以functionC總是用未定義的值來調用,因為functionB()尚未完成。 所以我嘗試了這個:

function functionA() {
    var def = $.Deferred();
    var myVar = functionB();
    def.resolve();
    $.when(def).done(function () {
        functionC(myVar);
    });
}

這也不起作用。 我在StackOverflow上看到了這一點: javascript函數等待另一個函數完成,但是如何將其轉移到我的問題上呢? 概括地說,功能A的執行需要停止,直到功能B()應答為止。 謝謝。

您可以更改functionB以返回延遲的對象,然后可以在異步處理程序中解析該對象,如下所示:

function functionA() {
    var deferred = functionB();
    $.when(deferred).done(functionC);
}

function functionB() {
    var deferred = $.Deferred();

    // do something async here...
    // asyncCallback() { 
    //     deferred.resolveWith(this, dataRetrieved);   
    // }

    return deferred;
}

function functionC(data) {
    console.log(data);
}

將示例放在一個簡單的對象中,可以執行以下操作:

var myObject = {
    myProp: null,
    functionA: function () {
        this.functionB();
        var self = this;
        var i = setInterval(function () {
            if (self.myProp) {
                clearInterval(i);
                self.functionC();
            }
        }, 100);
    },
    functionB: function () {
        // ...
        this.myProp = 'user input';
    },
    functionC: function () {
        // ...
    }
};
myObject.functionA();

如果設置了myProp ,腳本將每隔0.1s檢查一次。 如果是這樣,則清除間隔並functionC

在這種情況下,不需要jQuery。

您可以通過functionC作為參數傳遞給你的functionB如上面所提到這里

function functionA() {
   var myVar = functionB(callback);
   functionC(myVar);
}

function functionB(callback) {
   // does something ...
   if(callback && typeof(callback) === "function") {
      callback();
   }
}

暫無
暫無

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

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