我有這樣的功能:如何在Javascript中使用異步條件執行「for」循環?
waitForFreeAccnt.prototype.isMemberFree = function() {
var self = this;
self.api.getMemberInfo(function() {
var accType = self.api.connect.accountType;
console.log(accType);
if (accType === 'FREE') {
console.log('it is free');
return true;
} else {
console.log('it is not free');
return false;
}
});
};
我想等到帳戶是自由長達10秒,這樣的事情:
var test = function() {
for (var start = 1; start < 10; start++) {
var result = self.isMemberFree();
console.log(result);
if (result) {
break;
} else {
self.api.pause(1000);
console.log('waiting');
}
}
};
但它不工作,因爲self.api.getMemberInfo
是異步呼叫。這對Javascript非常令人沮喪。任何其他語言都會這麼簡單。在繼續循環之前,如何強制for循環等待self.isMemberFree()
完成執行?
還要注意,這不是在瀏覽器執行,所以我不在乎掛什麼。
不'self.api.connect'返回某種延期對象或承諾?在移動到下一個項目之前,您應該等待對象被解決。 – Terry
@nnnnnn,我希望它撥打10次電話,並在通話之間等待1秒鐘。我不在乎電話會發生多久。我們假設每次打電話只需一分鐘。所以它可以等到10分10秒,我會沒事的。 – Prostak
@Terry,我的不好,實際上getMemberInfo返回某種對象。 – Prostak