2013-03-24 72 views
0

我正在嘗試在parse.com上爲以下內容編寫雲代碼。我有三類用戶,品牌和廣告系列。我在User類中保留LastLoginTime。品牌類有一個名爲Campaigns to Campaign類的關係。我需要從用戶那裏檢索LastLoginTime,然後獲取所有更新日期大於LastLoginTime的廣告系列,最後我需要檢索與這些廣告系列相關的品牌。到目前爲止,我只能做一個函數來獲取LastLoginTime。我試圖使用matchesKeyInQuery或鏈接功能,但還沒有能夠解決。這是迄今爲止的代碼。parse.com雲嵌套功能

Parse.Cloud.define("getLoginTime",function(request, response){ 
    var User = Parse.Object.extend("User"); 
    var query = new Parse.Query(User); 
    var lastlogin; 
    query.equalTo("objectId", request.params.objectId); 
    query.first({ 
     success: function(object) { 
      // The object was retrieved successfully. 
      lastlogin = object.get("LastLoginTime"); 
      response.success(lastlogin);  // works well if left alone :) 
      console.log("entered time"); 
      console.log(lastlogin); 
     }, 
     error: function(object, error) { 
      // The object was not retrieved successfully. 
      // error is a Parse.Error with an error code and description. 
     } 
    }); 
}); 

上述作品,下面沒有:

Parse.Cloud.define("getNewCampaigns", function (request, response){ 
     var Campaign = Parse.Object.extend("Campaigns"); 
     var cquery = new Parse.Query(Campaign); 
     var lastlogin; 
     lastlogin = parse.Cloud.run("getloginTime",request.params.objectId); 
     cquery.greaterThan("updatedAt",lastlogin); 
     cquery.find({ 
      success: function(results) { 
       // results is an array of Parse.Object. 
       response.success(results); 
      }, 

      error: function(error) { 
       // error is an instance of Parse.Error. 
      } 
     }); 
    }); 

有沒有一種方法或做我需要改變我的模型。

回答

1

Parse.Cloud.run返回一個PromiseMore on Promises for Parse here),或者您可以發送回調作爲第三個參數。

使用回調你的代碼看起來有點像這樣:

Parse.Cloud.run("getloginTime", request.params.objectId, { 
    success: function(lastlogin) { 
     cquery.greaterThan("updatedAt",lastlogin); 
     cquery.find({ 
      success: function(results) { 
       // results is an array of Parse.Object. 
       response.success(results); 
      }, 
      error: function(error) { 
       // error is an instance of Parse.Error. 
      } 
     }); 
    }, 
    error: function(error) {} 
}); 

見討厭嵌套在這裏? 使用的承諾,你的代碼將是這個樣子,而不是:

Parse.Cloud.run("getloginTime", request.params.objectId).then(function(lastlogin) { 
    var cquery = new Parse.Query(Campaign); 
    cquery.greaterThan("updatedAt", lastlogin); 

    return cquery.find(); 
}).then(function(results) { 
    // results is an array of Parse.Object. 
    response.success(results); 
}, function(error) { 
    // error is an instance of Parse.Error. 
}); 
+0

以上與承諾的代碼在開始時給出了錯誤的權利,不能想出什麼問題: {「代碼」:141,「錯誤」:」 TypeError:無法在Object.t.Cloud.run(Parse.js:1:71298)處設置undefined \ n的屬性'success'\ n在main.js:291:17「} – imran 2013-03-25 19:50:34

+0

」response「未定義,怎麼做你的代碼看起來像現在? – hank 2013-03-26 07:09:18