我有这样的功能:如何在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