Parse IOS SDK: Comprensione del codice cloud
-
20-12-2019 - |
Domanda
Scenario = Sto lentamente ma sicuramente avvolgendo la mia testa intorno a ciò che sta succedendo con le caratteristiche del codice cloud di Parse. Ho solo bisogno di aiuto da coloro che vorrebbero rispondere ad alcune domande brevi e relativamente semplici su ciò che sta succedendo in alcune funzioni del codice cloud di esempio.
Il codice che utilizzerò in questo esempio è inferiore a
1)
Parse.Cloud.define('editUser', function(request, response) {
var userId = request.params.userId,
newColText = request.params.newColText;
var User = Parse.Object.extend('_User'),
user = new User({ objectId: userId });
user.set('new_col', newColText);
Parse.Cloud.useMasterKey();
user.save().then(function(user) {
response.success(user);
}, function(error) {
response.error(error)
});
});
.
2)
[PFCloud callFunction:@"editUser" withParameters:@{
@"userId": @"someuseridhere",
@"newColText": @"new text!"
}];
.
Questo codice è stato scattato da qui
Domanda 1 =
(request, response)
.
Sono confuso da ciò che è questo. Questo è come typecasting in ios dove sto dicendo (nella chiamata iOS) Voglio passare un NSString in questa funzione ("ID utente") e all'interno della funzione del codice cloud lo chiamerò "Richiesta"? È che cosa sta succedendo qui?
Domanda 2 =
Parse.Object.extend('_User')
.
Si afferra la classe "Utente" dal database Parse in modo che un "PFObject" di ordinamenti possa aggiornarlo creando un nuovo "utente" nella riga sotto di esso?
PFObject *userObject = [PFObject objectWithClassName:@"User"]?
.
Domanda 3 =
user.set('new_col', newColText)
.
Questo ovviamente "imposta" i valori da salvare nel PFUSER (~ Penso). So che la variabile "NewColtExt" è il testo che deve essere impostato - ma cos'è "new_col"? L'unica cosa in cui riesco a pensare è che questo imposta il nome di una nuova colonna nel database di qualunque tipo venga trasmesso attraverso la "richiesta"?
[[PFUser currentUser] setObject: forKey:]
.
Domanda 4 =
Parse.Cloud.useMasterKey()
.
Senza diventare troppo tecnici, è fondamentalmente tutto ciò che devo digitare prima di poter modificare un oggetto "utente" da un altro utente?
Domanda 5 =
user.save().then(function(user) {
response.success(user);
}
.
[user saveInBackgroundWithBlock:]?
.
e se sì, è
function(error) {
response.error(error)
.
Basta impostare ciò che accade se c'è un errore nel salvadinbackgroundwithblock?
Tieni presente, conosco iOS - non JavaScript. Quindi cerca di essere il più descrittivo possibile a qualcuno che capisce il regno di Apple.
Soluzione
Ecco la mia opinione sulle tue domande:
- .
- Il parametro
request
è per consentirti di accedere a tutto ciò che fa parte della richiesta / chiamata alla funzione cloud, include i parametri passati (request.params
), l'utente che viene autenticato sul client (request.user
) e alcune altre cose può imparare in Documentazione . Ilresponse
è per consentirti di inviare informazioni al codice di chiamata, generalmente si chiamaresponse.success()
oresponse.error()
con una stringa / oggetto opzionale / ecc. Che viene incluso nella risposta, di nuovo Documentation qui . - È un modo per creare un'istanza di un
User
, che poiché è una classe interna speciale è denominata_User
invece, lo stesso con_Role
e_Installation
. Sta creando un'istanza dell'utente con un ID, non la creazione di uno nuovo (che non avrebbe un ID fino al salvato). Quando si crea un oggetto in questo modo puoi "patch" semplicemente modificando le proprietà che si desidera aggiornate. - Ancora, guarda il documentazione o Esempio , il primo parametro è il nome della colonna (verrà creato se non esiste), il secondo valore è cosa Vuoi che quella colonna sia impostata.
- Devi fare
Parse.Cloud.useMasterKey()
quando è necessario fare qualcosa che l'utente registrato nel client non ha il permesso di fare. Significa "Ignora tutta la sicurezza, so cosa sto facendo". - Stai vedendo una catena di promessa, ogni passo nella catena consente di passare a un gestore "successo" e un gestore "errore" opzionale. C'è un bel po 'di Documentazione . È molto utile quando vuoi fare un paio di cose in ordine, e.g.
Codice campione:
var post = new Parse.Object('Post');
var comment = new Parse.Object('Comment');
// assume we set a bunch of properties on the post and comment here
post.save().then(function() {
// we know the post is saved, so now we can reference it from our comment
comment.set('post', post);
// return the comment save promise, so we can keep chaining
return comment.save();
}).then(function() {
// success!
response.success();
}, function(error) {
// uh oh!
// this catches errors anywhere in the chain
response.error(error);
});
.Altri suggerimenti
Sono praticamente nello stesso posto come te, ma ecco i miei pensieri:
- .
- No, questi sono i parametri ricevuti dalla funzione.Quando qualcosa chiama la funzione cloud
editUser
, avrai questi due oggetti da utilizzare: Richiesta & Risposta .La richiesta è fondamentalmente ciò che il dispositivo iOS inviato al server e la risposta è ciò che il server invierà al dispositivo iOS. - non proprio.È come creare una sottoclasse di _User .
- Pensa ai tipi di oggetti Parse come tabella di database e sono istanze come righe.
set
Imposterà (derp) il valore di 'NewColtExt' all'attributo / colonna 'new_col'. - Non sono sicuro, mai usato quella funzione come non gestire gli oggetti dell'utente.Ma potrebbe essere quello.
- praticamente così.Ma è più tipo come (pseudo-code, mescolando JS con OBJ-C):
[user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error){
if(error){
response.error(error); // mark the function as failed and return the error object to the iOS device
}
else{
response.success(user); // mark the function call as successful and return the user object to the iOS device
}
}];