不能链接在云代码中返回Promise的自定义函数
Can't chain my custom function that returns a Promise in 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);
}
);
但是如果我把事情改成以下,我得到"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);
}
});
}
编辑-我已经更新了我的函数,尝试了一些不同的事情,以确保它返回一个承诺,按照Bergi的建议,但我仍然得到相同的"不能调用方法'then'的未定义…"错误信息。我要把这个打开。让我知道,如果你有一个建议,这个函数应该如何正确编写!
我的第一次尝试:
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;
}
我尝试的最后一个hack方法:
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()
没有返回承诺。事实上,您的sendSMSWrapper
缺少return
语句(即使创建了承诺)。
相关文章:
- 在promise完成后,依次运行返回promise的函数
- 等待's返回Promise而不是value
- 当数组中的某个函数没有返回promise时,我可以使用$q.all吗
- 可以为云端点打开.client.load返回promise
- 使用从内部函数返回的异步数据对外部函数返回promise
- 在Angular服务中使用$http时,为什么要返回promise和数据
- 从自定义函数返回promise
- Leadfoot会话对象返回promise
- For循环以错误的顺序返回promise
- 返回promise而不是jquery ajax调用
- 当异步验证器在AngularJS中返回promise时提交表单
- 函数返回Promise,检查错误
- 在jQuery中返回promise()或deferred有什么区别
- 在 JavaScript 中,当 'parent()' 返回 Promise 时,如何实现递归的 'ancestors(
- Angular$q返回promise两次$http服务调用
- 对返回promise的函数使用.success时,Undefined不是函数
- 返回promise的链接函数;刷新超时后无法解析
- Angular Service在返回promise时抛出异常
- 模拟服务返回promise:无法读取未定义的属性
- 这个JavaScript函数需要返回Promise吗