我有一个返回承诺的函数。我在一系列看似如下的承诺中使用过它:
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;
}
)
}
答案 0 :(得分:1)
显然functionThatIsFailing()
没有回复承诺。实际上,您的sendSMSWrapper
缺少return
语句(即使已创建承诺)。