2014-10-09 85 views
6

我想從objectId獲取用戶對象。我知道objectId是有效的。但我可以得到這個簡單的查詢工作。它有什麼問題?查詢後用戶仍未定義。解析雲代碼檢索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; 
}; 

回答

20

使用承諾的快速雲代碼示例。我在那裏有一些文檔,我希望你可以關注。如果您需要更多幫助,請告訴我。

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()方法。感謝你! – 2015-09-01 22:37:02

+0

Parse.Cloud.useMasterKey();已在Parse Server版本2.3.0(2016年12月7日)中棄用。從那個版本開始,它是一個無操作(它什麼都不做)。您現在應該將{useMasterKey:true}可選參數插入到需要在代碼中重寫ACL或CLP的每個方法中。 – alvaro 2017-06-01 00:27:45

0

問題在於Parse查詢是異步的。這意味着它將在查詢有時間執行之前返回user(null)。無論您想如何處理用戶,都需要放在成功之中。希望我的解釋能幫助你理解爲什麼它是未定義的。

調查Promises。從第一個查詢中得到結果後,這是更好的方法。

+0

我試過從成功內退回,它沒有工作。我將考慮到查詢是異步的這一事實;我沒有意識到這一點。 – Ben 2014-10-09 20:40:00

+0

您可以將其餘的功能添加到成功中嗎? – Dehli 2014-10-09 20:40:55

+0

我會嘗試使用承諾在成功案例中繼續。 – Ben 2014-10-09 20:57:42