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

时间:2015-10-22 00:56:02

标签: javascript parse-platform promise cloud-code

我有一个返回承诺的函数。我在一系列看似如下的承诺中使用过它:

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

但是,如果我将内容更改为以下内容,则会出现“无法调用方法”,然后将“未定义为...”作为错误消息。

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

编辑 - 我已经更新了我的功能,尝试了几个不同的东西,以确保它返回一个承诺,根据Bergi的建议,但我仍然得到相同的“不能调用方法'然后'未定义.. 。“ 错误信息。我正在打开这个。如果您对如何正确编写此函数有任何建议,请告诉我们!

我第一次尝试解决问题:

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

1 个答案:

答案 0 :(得分:1)

显然functionThatIsFailing()没有回复承诺。实际上,您的sendSMSWrapper缺少return语句(即使已创建承诺)。