2013-05-15 71 views
2

我已經得到了follwing parse.com雲代碼錯誤:101對象未找到更新

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); 
    } 

}); 

OPTION1 我嘗試bookStatus設置爲返回的書後,保存查詢書。

OPTION2 我儘量節省新書對象與任何2個選項我最終得到的parse.com日誌設置book.Id

 book.id = bookId; 
     book.set("bookStatus", new BookStatus({id: newBookStatus})); 

但是之後:

錯誤:101找不到更新的對象 錯誤:未找到更新的對象

任何想法我做錯了什麼?

在此先感謝!

--edit

與新實施的獲取:

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 

回答

6

你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,而不是使用的查詢,您可以創建一個指針和取出它直。

最終afterSave鉤:

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); 
      } 

     }); 
    }); 
+0

afterSave鉤後的第一次我看來,像我的選項1我使用。選項2正在被我弄髒,因爲我再次設置了我現在得到的ID!我用你從第二個答案中得到的代碼更新了這個問題。感謝您的幫助@Hector拉莫斯 – Arcayne

+0

是否這本書的對象具有不授予您寫訪問的ACL?日誌語句似乎表明您沒有保存該對象的權限,只能讀取它。 –

+0

VAR newAcl =新Parse.ACL(Parse.User.current()); newAcl.setPublicReadAccess(true); book.setACL(newAcl);巫最終在雲中的代碼,如: 「ACL」:{ 「6xpiAHX9Ju」:{ 「讀」:真實的, 「寫」:真正}, 「*」:{ 「讀」:真正}}} – Arcayne

2

以下是我的一些周圍

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(); 
在我的博客文章在這個問題上

更多的信息在這裏運行後做到了:雖然找 http://aprogrammersday.blogspot.com/2015/02/fix-parse-101-error-object-not-found.html

0

對於這個錯誤,我發現這個線程是最有用的。我想補充一點,object not found for get也可以實質上意味着foreign key reference not found

not found for get錯誤可以是令人難以置信的無益;對我來說,它甚至沒有給出錯誤發生的行號,錯誤信息非常模糊,我找不到任何文檔中的短語。

如果遇到此錯誤,您會發現許多對權限問題的引用,但是如果您已經在使用master key,則需要找到所選對象上由外鍵引用的對象。

相關問題