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))
};