Javascript 递归承诺陷入无限循环
Javascript recursive promise stuck in infinite loop
我创建了一个递归承诺函数:
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
块中 return,它应该存在该功能。
Even when sshable
becomes true, this function keeps recursively going on and on in an infinite loop.
我无法重现。似乎有其他东西在调用您的 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))
};
我创建了一个递归承诺函数:
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
块中 return,它应该存在该功能。
Even when
sshable
becomes true, this function keeps recursively going on and on in an infinite loop.
我无法重现。似乎有其他东西在调用您的 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))
};