Parse platform 错误:找不到要更新的101对象
我有以下parse.com云代码Parse platform 错误:找不到要更新的101对象,parse-platform,Parse Platform,我有以下parse.com云代码 Parse.Cloud.afterSave("Action", function (request) { var BookStatus = Parse.Object.extend("BookStatus"); var Book = Parse.Object.extend("Book"); var book = new Book(); var actionType = request.object.get("actionTypePointer").id; va
Parse.Cloud.afterSave("Action", function (request) {
var BookStatus = Parse.Object.extend("BookStatus");
var Book = Parse.Object.extend("Book");
var book = new Book();
var actionType = request.object.get("actionTypePointer").id;
var bookId = request.object.get("bookPointer").id;
var queryBook = new Parse.Query("Book");
var newBookStatus;
queryBook.get(bookId,{
success: function (gottenBook) {
newBookStatus = "idOfTheBookStatus";
book.id = bookId;
book.set("bookStatus", new BookStatus({id: newBookStatus}));
gottenBook.set("bookStatus", new BookStatus({id: newBookStatus}));
//OPTION 1
gottenBook.save(null,{
success: function(data) {
console.log("Bookstatus updated1");
},
error: function (data,error) {
// error is a Parse.Error with an error code and description.
console.log("Error: " + error.code + " " + error.message);
}
});
//OPTION 2
book.save(null,{
success: function(data) {
console.log("Bookstatus updated2");
},
error: function (data,error) {
// error is a Parse.Error with an error code and description.
console.log("Error: " + error.code + " " + error.message);
}
});
},
error: function (object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and description.
console.log("Error: " + error.code + " " + error.message);
}
});
选择1
在将bookStatus设置为返回的图书后,我尝试保存查询的图书
选择2
设置book.Id后,我尝试保存新书对象
book.id = bookId;
book.set("bookStatus", new BookStatus({id: newBookStatus}));
但是,使用parse.com日志中的两个选项中的任意一个:
错误:找不到要更新的101对象
错误:找不到要更新的101对象
知道我做错了什么吗
提前谢谢
--编辑
使用fetch的新实现:
Parse.Cloud.afterSave("Action", function (request) {
var BookStatus = Parse.Object.extend("BookStatus");
var Book = Parse.Object.extend("Book");
var book = new Book();
var actionType = request.object.get("actionTypePointer").id;
var bookId = request.object.get("bookPointer").id;
book.id = bookId;
console.log("before fetch book.id" + book.id);
var newBookStatus;
book.fetch({
success: function (book) {
newBookStatus = "XMFkXS9NVv";
book.set("bookStatus", new BookStatus({id: newBookStatus}));
console.log("book" + book);
console.log("book.id" + book.id);
console.log("book.isValid()" + book.isValid());
book.save(null,{
success: function(data) {
console.log("Book Status updated to:" +newBookStatus);
},
error: function (data,error) {
// error is a Parse.Error with an error code and description.
console.log("Error: " + error.code + " " + error.message);
}
});
},
error: function (object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and description.
console.log("Error: " + error.code + " " + error.message);
}
});
}))
结果:
Input: {"place":{"__type":"GeoPoint","latitude":41.354643806134625,"longitude":2.121594674804572},"bookLocationDescription":"sad","bookPointer":{"__type":"Pointer","className":"Book","objectId":"kWcALge4az"},"actionTypePointer":{"__type":"Pointer","className":"ActionType","objectId":"kJC954w9iO"},"userPointer":{"__type":"Pointer","className":"_User","objectId":"6xpiAHX9Ju"},"createdAt":"2013-05-16T13:59:33.810Z","updatedAt":"2013-05-16T13:59:33.810Z","objectId":"PwlXhKL51l","ACL":{"6xpiAHX9Ju":{"read":true,"write":true},"*":{"read":true}}}
Result: Success
I2013-05-15T20:52:19.170Z] before fetch book.idc1iKxw3NLD
I2013-05-15T20:52:19.273Z] book[object Object]
I2013-05-15T20:52:19.273Z] book.idc1iKxw3NLD
I2013-05-15T20:52:19.273Z] book.isValid()true
I2013-05-15T20:52:19.325Z] Error: 101 object not found for update
您的afterSave钩子正在覆盖已获取书籍的对象id。即使您在其上设置了相同的对象id,该对象现在仍认为它脏了,不再是有效的引用 通过使用由
get()
返回的书籍而不更新其id来避免此问题:
Parse.Cloud.afterSave("Action", function (request) {
var BookStatus = Parse.Object.extend("BookStatus");
var Book = Parse.Object.extend("Book");
var book = new Book();
var actionType = request.object.get("actionTypePointer").id;
var bookId = request.object.get("bookPointer").id;
var queryBook = new Parse.Query("Book");
var newBookStatus;
queryBook.get(bookId,{
success: function (book) {
newBookStatus = "idOfTheBookStatus";
book.set("bookStatus", new BookStatus({id: newBookStatus}));
book.save(null,{
success: function(data) {
console.log("Bookstatus updated1");
},
error: function (data,error) {
// error is a Parse.Error with an error code and description.
console.log("Error: " + error.code + " " + error.message);
}
});
},
error: function (object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and description.
console.log("Error: " + error.code + " " + error.message);
}
});
});
因为您已经知道这本书的id,所以不必使用查询,您可以创建一个指针并直接获取它
最终余波钩:
Parse.Cloud.afterSave("Action", function (request) {
var BookStatus = Parse.Object.extend("BookStatus");
var Book = Parse.Object.extend("Book");
var book = new Book();
var actionType = request.object.get("actionTypePointer").id;
var bookId = request.object.get("bookPointer").id;
book.id = bookId;
var newBookStatus;
book.fetch({
success: function (book) {
newBookStatus = "idOfTheBookStatus";
book.set("bookStatus", new BookStatus({id: newBookStatus}));
book.save(null,{
success: function(data) {
console.log("Bookstatus updated1");
},
error: function (data,error) {
// error is a Parse.Error with an error code and description.
console.log("Error: " + error.code + " " + error.message);
}
});
},
error: function (object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and description.
console.log("Error: " + error.code + " " + error.message);
}
});
});
下面是我跑了几圈后是怎么做到的
ParseCrashReporting.enable(this);
// Enable Local Datastore.
Parse.enableLocalDatastore(this);
// Add your initialization code here
Parse.initialize(this, "*******", "******");
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
ParseACL.setDefaultACL(defaultACL, true);
// save the installation
ParseInstallation.getCurrentInstallation().saveInBackground();
有关此问题的更多信息,请参见我的博客:
在查找此错误时,我发现此线程最有用。我想补充一点,get的
未找到对象
实际上也意味着未找到外键引用
get的未找到
错误可能毫无帮助;对我来说,它甚至没有给出错误发生的行号,错误信息非常模糊,我在任何文档中都找不到该短语的参考
如果您遇到此错误,您会发现很多权限问题的引用,但是如果您已经在使用
主密钥
,那么您需要在所选对象上查找外键引用的对象。在我看来,第一个after after hook类似于我使用的选项1。选项2被我再次设置的id弄脏了,我现在得到了这个!我用你第二个答案的密码更新了问题。感谢您的帮助@Hector Ramos此book对象是否具有不授予您写访问权限的ACL?日志语句似乎表明您没有保存该对象的权限,只能读取它。var newAcl=newparse.ACL(Parse.User.current());newAcl.setPublicReadAccess(true);book.setACL(newAcl);witch最后出现在云代码中,比如:“ACL”:{“6xpiAHX9Ju”:{“read”:true,“write”:true},“*”:{“read”:true}}}我也试图不设置ACL,但我有同样的运气。您是否以对象id为6xpiAHX9Ju的用户身份登录?这是唯一允许保存book对象的用户。