2013-03-24 95 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