2014-08-27 68 views
0

每個解析Installation我的Parse數據庫中的對象實例有一個指向特定用戶的指針。我有一個爲每個用戶運行的後臺作業,我想在後臺作業的這一部分中執行的操作是將各個用戶Installationchannel屬性設置爲["yesPush"],以實現推送通知定位。如何使用Parse Cloud Code更新對象的屬性?

我想通過查詢具體的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'在哪裏設置?你爲什麼在你的find中使用'return'調用?如果你期望最多1場比賽,你爲什麼使用'find'而不是'first'?你爲什麼不在實際對象本身上調用'set()'?你爲什麼不調用'save()'或'saveInBackground()'? – 2014-08-27 18:26:11

+0

'parentUser'是一個由包含函數調用的參數,它在fxn的不同部分中使用時沒有任何問題,所以我不認爲這是問題所在。我認爲必須在那裏使用回報,並且使用'find'而不是'first'是一個愚蠢的錯誤。我如何在對象上調用'set()'? – Ghobs 2014-08-27 20:08:47

回答

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()功能是你如何處理作業中的大型數據集。如果您在其中執行其他異步任務,則需要返回其承諾。

如果我們只期望一條記錄,那麼first()函數更快更容易。

我打電話給set()對實際installation對象返回first()

我要回復save()承諾允許承諾鏈接。