我创建了一个递归promise函数:
this.testFunction = Bluebird.method(function (instanceID) {
var object = this;
return object.canSsh(instanceID)
.then(function (sshable) {
if (sshable) {
return object.onSshable(instanceID)
.then(function () {
return Bluebird.resolve();
});
}
else {
return Bluebird.delay((SSH_POLLING_INTERVAL * 1000))
.then(function () {
return object.testFunction(instanceID);
});
}
})
.catch(function (err) {
return Bluebird.reject(err);
});
});
但是,即使sshable
成为真,此函数也会在无限循环中递归地继续运行。我预计,一旦我从sshable
块返回,它应该存在函数。
答案 0 :(得分:1)
即使
sshable
变为真,该函数也会以无限循环递归地继续进行。
我无法重现。看来其他内容正在调用您的testFunction
,而不是来自延迟then
回调的递归调用。
无论如何,您可以大大简化您的功能:
this.testFunction = function(instanceID) {
return this.canSsh(instanceID).then(function(sshable) {
if (sshable) {
return this.onSshable(instanceID);
} else {
return Bluebird.delay(SSH_POLLING_INTERVAL * 1000)
.then(this.testFunction.bind(this, instanceID));
}
}.bind(this))
};