无法链接我的自定义函数 returns 云代码中的 Promise

Can't chain my custom function that returns a Promise in cloud code

我有一个 returns 承诺的功能。我在一系列看起来像这样的承诺中使用了它:

function1().then
(
    function( result )
    {
        return functionThatIsFailing();
    }
).then
(
    function( result )
    {
        response.success("It worked!");
    },
    function( error )
    {
        response.error("There was an error: " + error.message);
    }
);

但是如果我将内容更改为以下内容,我会收到 "cannot call method 'then' of undefined at..." 作为错误消息。

function1().then
(
    function( result )
    {
        return functionThatIsFailing().then
        (
            function( result )
            {
                response.success("It Worked!");
            },
            function( error )
            {
                response.error("There was an error: " + error.message);
            }
        );
    }
);

这是有问题的自定义函数。它正在发送 Twilio 文本消息。该功能本身有效。当函数失败时,我什至会收到文本。

function sendSMSWrapper(to, from, body)
{
    var promise = new Parse.Promise();
    twilioClient.sendSms
    ({
        to: to,
        from: from,
        body: body
    }, function(err, responseData)
    {
        if(err)
        {
            promise.reject(err);
        }
        else
        {
            promise.resolve(responseData);
        }
    });
}

edit - 我已经更新了我的函数,按照 Bergi 的建议尝试了一些不同的东西来确保它返回一个承诺,但我仍然收到相同的 "cannot call method 'then' of undefined..." 错误消息。我正在打开这个备份。如果您对如何正确编写此函数有任何建议,请告诉我!

我第一次尝试解决问题:

function sendSMSWrapper(to, from, body)
{
    var promise = new Parse.Promise();
    twilioClient.sendSms
    ({
        to: to,
        from: from,
        body: body
    }, function(err, responseData)
    {
        if(err)
        {
            promise.reject(err);
            return promise;
        }
        else
        {
            promise.resolve(responseData);
            return promise;
        }
    });
}

那没用所以我试了这个:

    function sendSMSWrapper(to, from, body)
    {
        var promise = new Parse.Promise();
        twilioClient.sendSms
        ({
            to: to,
            from: from,
            body: body
        }, function(err, responseData)
        {
            if(err)
            {
                promise.reject(err);
            }
            else
            {
                promise.resolve(responseData);
            }
        });
        return promise;
    }

我尝试的最后一个 hacky 方法:

function sendSMSWrapper(to, from, body)
{
    var promise = new Parse.Promise();
    var promise2 = new Parse.Promise();
    return twilioClient.sendSms
    ({
        to: to,
        from: from,
        body: body
    }, function(err, responseData)
    {
        if(err)
        {
            promise.reject(err);
        }
        else
        {
            promise.resolve(responseData);
        }
    });
    return Parse.Promise.when( promise ).then
    (
        function( result )
        {
            console.log(result);
            promsie2.resolve(result);
            return promise2;
        },
        function( error )
        {
            console.log(error);
            promise2.reject(error);
            return promise2;
        }
    )
}

显然 functionThatIsFailing() 没有 return 承诺。事实上,您的 sendSMSWrapper 缺少 return 语句(即使创建了 promise)。