[英]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.