2015-10-26 2 views
2

У меня возникли проблемы со ссылкой на объект «Пользователь» изнутри запроса. У меня есть следующий код:Не удается создать указатель на несохраненный ParseObject

Parse.Cloud.define("getTabsBadges", function(request, response) { 
    var UserObject = Parse.Object.extend('User'); 
    var user = new UserObject(); 
    user.id = request.params.userId; 


    // Count all the locked messages sent to the user 
    var receivedMessagesQuery = new Parse.Query('Message'); 
    receivedMessagesQuery.equalTo('status', 'L'); 
    receivedMessagesQuery.equalTo('toUser', user); // THIS LINE GENERATES THE ERROR 


    receivedMessagesQuery.count({ 
    // more code here 
    }); 
}); 

я вызываю функцию с помощью CURL, но я всегда получаю следующее сообщение об ошибке:

{"code":141,"error":"Error: Cannot create a pointer to an unsaved 
ParseObject\n at n.value (Parse.js:14:4389)\n at n 
(Parse.js:16:1219)\n at r.default (Parse.js:16:2422)\n at e.a.value 
(Parse.js:15:1931)\n at main.js:9:25"} 

Я использую точно такой же код в другом проекте, единственное отличие состоит в том, что вместо подсчета объектов я нахожу их и свои работы правильно. Я также подтвердил, что таблицы имеют тип столбца Pointer<_User> в обоих проектах. Что вызывает проблему?

+0

Я думаю, что единственная проблема в том, что указатель _User не равен User pointer. Вы хотите использовать пользовательский класс, а не _User (класс по умолчанию)? попробуйте var user = new Parse.User(); – ChunTingLin

ответ

1

Сообщение об ошибке Cannot create a pointer to an unsaved означает, что вы пытаетесь использовать объект, который не существует в БД анализа.

С помощью var user = new UserObject(); вы создаете новый пользовательский объект. Вы не можете использовать его в запросе, пока не сохраните его в Parse.

Вместо создания нового объекта User и его настройки objectId выполните запрос для объекта User. См. Код ниже:

Parse.Cloud.define("getTabsBadges", function(request, response) { 
    var UserObject = Parse.Object.extend('User'); 
    var query = new Parse.Query(UserObject); 
    query.get(request.params.userId, { 
     success: function(user) { 
      // Count all the locked messages sent to the user 
      var receivedMessagesQuery = new Parse.Query('Message'); 
      receivedMessagesQuery.equalTo('status', 'L'); 
      receivedMessagesQuery.equalTo('toUser', user); // THIS LINE GENERATES THE ERROR 

      receivedMessagesQuery.count({ 
       // more code here 
      }); 
     }, 
     error: function(error) { 
      // error fetching your user object 
     } 
    }); 
}); 
+1

Что делать, если у меня есть массив идентификаторов объектов пользователя, и я хочу создать его указатели в цикле? –

+2

@HashamTahir Вы можете использовать метод 'createWithoutData (id)' для создания объектов только с их 'objectId' в цикле. Внутри цикла вы можете получить связанные данные, но операции выборки могут завершиться после завершения цикла. Суждения по Javascript могут помочь решить возможное состояние гонки. – kRiZ