2014-08-27 5 views
0

Каждый экземпляр объекта Parse Installation в моей базе данных Parse имеет указатель на определенный пользователь. У меня есть фоновое задание, которое выполняется для каждого пользователя, и что я хочу сделать в этой части задания фонового задания, - установить для пользователя значение channel для ["yesPush"], для целей таргетинга на уведомления.Как обновить свойство объекта с помощью кода Parse Cloud?

Как я понял, я бы сделал это, запросив конкретный экземпляр Parse.Installation, а затем установив его свойство каналов. Однако это не работает. Я пытаюсь следовать рекомендациям в Parse Cloud Code Docs, но это либо неправильный вариант использования, либо я не правильно его соблюдаю.

Код:

var installationQuery = new Parse.Query(Parse.Installation); 
installationQuery.equalTo('userId', parentUser); 

installationQuery.find().then(function(results) { 
    return Parse.Object.set('channels', ["yesPush"]); 
}); 
+0

Где находится 'parentUser'? почему вы используете вызов 'return' внутри вашей находки? Почему вы используете 'find' вместо' first', если вы ожидаете не более 1 матча? Почему вы не вызываете 'set()' на самом фактическом объекте? Почему вы не называете 'save()' или 'saveInBackground()'? –

+0

'parentUser' - это аргумент, вызываемый функцией encompassing, он используется в разных частях fxn без каких-либо проблем, поэтому я не думаю, что это проблема. Я думал, что туда нужно было вернуться, а использование 'find' вместо' first' было глупой ошибкой. Как я могу называть 'set()' на объекте? – Ghobs

ответ

1

Путь я хотел бы сделать это следующим образом:

// for every User 
var userQuery = new Parse.Query(Parse.User); 
userQuery.each(function(user) { 
    var installationQuery = new Parse.Query(Parse.Installation); 
    installationQuery.equalTo('userId', user); 

    return installationQuery.first().then(function(installation) { 
    installation.set('channels', ['yesPush']); 
    return installation.save(); 
    }); 
}).then(function() { 
    status.success(); 
}, function(error) { 
    status.error(error.message); 
}); 

each() функция как обрабатывать большие наборы данных в работе. Если вы выполняете другие задачи async внутри, вам нужно вернуть свое обещание.

Функция first() намного быстрее и проще, если мы ожидаем только одну запись.

Я звоню set() на самом деле installation объект, возвращаемый first().

Я возвращаю обещание save(), чтобы обеспечить цепочку обещания.

Смежные вопросы