Javascript CloudCode系列承诺,帮助函数给出错误“;对象没有方法';应用'&引用;
我是JavaScript新手,我正在尝试让我的第一批云代码正常工作。我已经创建了一个helper函数Javascript CloudCode系列承诺,帮助函数给出错误“;对象没有方法';应用'&引用;,javascript,node.js,parse-platform,promise,parse-cloud-code,Javascript,Node.js,Parse Platform,Promise,Parse Cloud Code,我是JavaScript新手,我正在尝试让我的第一批云代码正常工作。我已经创建了一个helper函数deleteFriendRequest,因为我希望其他函数使用它。我写的东西很管用,但是我抛出了一个错误 我的助手功能: function deleteFriendRequest(requestObjectId) { // create query to find FriendRequest from its objectId var requestQuery = new Pars
deleteFriendRequest
,因为我希望其他函数使用它。我写的东西很管用,但是我抛出了一个错误
我的助手功能:
function deleteFriendRequest(requestObjectId) {
// create query to find FriendRequest from its objectId
var requestQuery = new Parse.Query("FriendRequest");
requestQuery.equalTo("objectId", requestObjectId);
return requestQuery.first().then(function(friendRequestObj) {
return friendRequestObj.destroy();
});
}
使用它的函数:
Parse.Cloud.define("createFriendship", function(request, response) {
Parse.Cloud.useMasterKey();
var currentUser = request.user;
var friendRequestId = request.params.friendRequestObjectId;
var fromUser;
var fromRelation;
var requestQuery = new Parse.Query("FriendRequest");
requestQuery.equalTo("objectId", friendRequestId);
requestQuery.include("fromUser");
requestQuery.first().then(function(friendRequestObj) {
fromUser = friendRequestObj.get("fromUser");
fromRelation = currentUser.relation("friendsRelation");
fromRelation.add(fromUser);
return currentUser.save();
}).then(function(friendRequestObj) {
var toRelation = fromUser.relation("friendsRelation");
toRelation.add(currentUser);
return fromUser.save();
}).then(deleteFriendRequest(friendRequestId))
.then(function(error) {
response.error(error);
});
});
当我运行
createFriendly
时,出现以下错误:
Input: {"friendRequestObjectId":"qVIa9zzPR0"}
Result: TypeError: Object [object Object] has no method 'apply'
at e (Parse.js:2:8941)
at Parse.js:2:8390
at Array.forEach (native)
at Object.x.each.x.forEach [as _arrayEach] (Parse.js:1:661)
at c.extend.resolve (Parse.js:2:8341)
at Parse.js:2:9020
at e (Parse.js:2:8941)
at Parse.js:2:8390
at Array.forEach (native)
at Object.x.each.x.forEach [as _arrayEach] (Parse.js:1:661)
提前感谢任何人提供的帮助。尝试使用
Parse.Cloud.useMasterKey()在deleteFriendRequest
方法中的code>。看起来当前用户可能无权访问该行
您的另一个选项可能是在创建好友请求时尝试设置ACL。您必须再次使用主密钥,但您可以在该阶段设置ACL以包括当前用户和请求的朋友。这样,他们都可以访问它。表达式
`.then(deleteFriendRequest(friendRequestId))`
。。。立即调用deleteFriendRequest(friendRequestId)
,并将返回的承诺传递给。然后()
但是,.then()
接受函数作为其参数,而不是承诺
尝试:
或
更进一步
deleteFriendRequest()
中的大部分内容是对friendRequestObj
的派生,这是调用方函数中已经完成的工作的重复,因此除非在应用程序的其他地方需要deleteFriendRequest()
,否则该行将返回friendRequestObj.destroy()
可以移动到调用方,并且deleteFriendRequest()
可以消失
Parse.Cloud.define("createFriendship", function(request, response) {
Parse.Cloud.useMasterKey();
var requestQuery = new Parse.Query("FriendRequest");
requestQuery.equalTo("objectId", request.params.friendRequestObjectId);
requestQuery.include("fromUser");
requestQuery.first()
.then(function(friendRequestObj) {
var fromUser = friendRequestObj.get("fromUser");
request.user.relation("friendsRelation").add(fromUser);
fromUser.relation("friendsRelation").add(request.user);
// The two saves can most likely be performed in parallel
return Parse.Promise.when(
request.user.save(),
fromUser.save()
)
.then(function() {
return friendRequestObj.destroy(); //<<<<<<<< moved here from deleteFriendRequest()
});
})
.then(response.success, response.error);
});
Parse.Cloud.define(“createFriendly”),函数(请求、响应){
Parse.Cloud.useMasterKey();
var requestQuery=newparse.Query(“FriendRequest”);
requestQuery.equalTo(“objectId”,request.params.friendRequestObjectId);
requestQuery.include(“fromUser”);
requestQuery.first()
.then(函数(friendRequestObj){
var fromUser=friendRequestObj.get(“fromUser”);
request.user.relation(“friendsRelation”).add(fromUser);
fromUser.relation(“friendsRelation”).add(request.user);
//这两个保存最有可能并行执行
返回Parse.Promise.when(
request.user.save(),
fromUser.save()
)
.然后(函数(){
return friendRequestObj.destroy();//createFriendly
的工作原理是它创建了所需的关系并删除了好友请求,但我得到了那个错误,所以我的Android客户端得到了一个异常并认为该功能失败。这似乎与访问无关,因为它在这方面做了它应该做的事情。想法?你给出的不会有帮助lve由于Parse.js源代码中的错误很深,所以请解决此问题。apply()
是函数对象的一种方法。您可能正在传递一个对象,而您应该在其中传递一个函数。谢谢,这在很多方面确实帮助了我的理解。您最后的“继续…”建议似乎最适合这份工作,但我仍然得到了成功/错误,当事情正常运行时,没有调用,因此我缺少了响应。成功。这里最适合放在哪里?好的一点是,响应。成功没有调用。倒数第二行中,一个null
移位响应.error
排在.then()参数列表的第二位。null
实际上应该用一个函数替换。最简单的方法是response.success
。要真正提供成功消息,您需要类似的内容。然后(function(){response.success(“我的成功消息”);},response.error)
让我知道这是否有效,我会编辑我的答案。用响应替换null
。成功满足我的需要。非常感谢您的帮助!!
.then(deleteFriendRequest.bind(null, friendRequestId))
Parse.Cloud.define("createFriendship", function(request, response) {
Parse.Cloud.useMasterKey();
var requestQuery = new Parse.Query("FriendRequest");
requestQuery.equalTo("objectId", request.params.friendRequestObjectId);
requestQuery.include("fromUser");
requestQuery.first()
.then(function(friendRequestObj) {
var fromUser = friendRequestObj.get("fromUser");
request.user.relation("friendsRelation").add(fromUser);
fromUser.relation("friendsRelation").add(request.user);
// The two saves can most likely be performed in parallel
return Parse.Promise.when(
request.user.save(),
fromUser.save()
)
.then(function() {
return friendRequestObj.destroy(); //<<<<<<<< moved here from deleteFriendRequest()
});
})
.then(response.success, response.error);
});