2014-10-09 21 views
6

ile alınıyor Kullanıcı nesnesini objectId'den almaya çalışıyorum. Nesnenin geçerli olduğunu biliyorum. Ama bu basit sorguyu işe alabilirim. Onun nesi var? kullanıcı sorgudan sonra hala tanımlanmamıştır.Parse Cloud Code bir kullanıcı objectId

var getUserObject = function(userId){ 
    Parse.Cloud.useMasterKey(); 
    var user; 
    var userQuery = new Parse.Query(Parse.User); 
    userQuery.equalTo("objectId", userId); 

    userQuery.first({ 
     success: function(userRetrieved){ 
      console.log('UserRetrieved is :' + userRetrieved.get("firstName")); 
      user = userRetrieved;    
     } 
    }); 
    console.log('\nUser is: '+ user+'\n'); 
    return user; 
}; 

cevap

20

Sözler kullanarak hızlı bulut kodu örneği. İçinde bazı belgeler var, umarım takip edebilirsiniz. Daha fazla yardıma ihtiyacın olursa haberim olsun.

Parse.Cloud.define("getUserId", function(request, response) 
{ 
    //Example where an objectId is passed to a cloud function. 
    var id = request.params.objectId; 

    //When getUser(id) is called a promise is returned. Notice the .then this means that once the promise is fulfilled it will continue. See getUser() function below. 
    getUser(id).then 
    ( 
     //When the promise is fulfilled function(user) fires, and now we have our USER! 
     function(user) 
     { 
      response.success(user); 
     } 
     , 
     function(error) 
     { 
      response.error(error); 
     } 
    ); 

}); 

function getUser(userId) 
{ 
    Parse.Cloud.useMasterKey(); 
    var userQuery = new Parse.Query(Parse.User); 
    userQuery.equalTo("objectId", userId); 

    //Here you aren't directly returning a user, but you are returning a function that will sometime in the future return a user. This is considered a promise. 
    return userQuery.first 
    ({ 
     success: function(userRetrieved) 
     { 
      //When the success method fires and you return userRetrieved you fulfill the above promise, and the userRetrieved continues up the chain. 
      return userRetrieved; 
     }, 
     error: function(error) 
     { 
      return error; 
     } 
    }); 
}; 
+0

query.first() yöntemi hakkında hiçbir fikrim yoktu. Bunun için teşekkürler! –

+0

Parse.Cloud.useMasterKey(); Parse Server sürüm 2.3.0'da (7 Aralık 2016) kullanımdan kaldırılmıştır. Bu versiyondan itibaren no-op (hiçbir şey yapmıyor). Artık, kodunuzdaki ACL veya CLP'yi geçersiz kılacak yöntemlerin her birine {useMasterKey: true} isteğe bağlı parametreyi eklemelisiniz. – alvaro

0

Buradaki sorun, Ayrıştırma sorgularının eşzamansız olmasıdır. Bu, sorguyu yürütmek için zamanı olan kullanıcı (null) döndürecek anlamına gelir. Kullanıcı ile ne yapmak istersen başarının içine koyulmalı. Umarım benim açıklamam neden tanımlanmadığını anlamanıza yardımcı olur.

Promises'a bakın. İlk sorgudaki sonucu aldıktan sonra bir şey çağırmanın daha güzel bir yolu.

+0

Başarıdan dönmeyi denedim ve işe yaramadı. Sorguların asenkron olduğunu dikkate alacağım; Bunu fark etmemiştim. – Ben

+0

İşlevlerinizin geri kalanını başarıya katabilir misiniz? – Dehli

+0

Başarı durumunda devam etmek için sözlerini kullanmayı deneyeceğim. – Ben

İlgili konular