无法链接我的自定义函数 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)。
我有一个 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)。