Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Parse.Cloud.beforeSave无法在正在创建的对象上设置新字段_Javascript_Parse Server_Mlab_Heroku Api_Parse Cloud Code - Fatal编程技术网

Javascript Parse.Cloud.beforeSave无法在正在创建的对象上设置新字段

Javascript Parse.Cloud.beforeSave无法在正在创建的对象上设置新字段,javascript,parse-server,mlab,heroku-api,parse-cloud-code,Javascript,Parse Server,Mlab,Heroku Api,Parse Cloud Code,我在Parse服务器上的Parse.Cloud.beforeSave函数中遇到了一个小问题。这句话让我很困惑: request.object.set("dbCount", 0); 它以前一直在工作。但是,由于我进行了服务器更新,按照heroku cedar-14堆栈的要求,我将在heroku-18堆栈上进行更新。它不再起作用了 此行的目的是在数据库中存储新项目时,将计数器初始化为零。但是,尽管该项是按其应该的方式创建的,但缺少字段dbCount。为什么呢?创建字段的正确代码是什么 以下是bef

我在Parse服务器上的Parse.Cloud.beforeSave函数中遇到了一个小问题。这句话让我很困惑:

request.object.set("dbCount", 0);
它以前一直在工作。但是,由于我进行了服务器更新,按照heroku cedar-14堆栈的要求,我将在heroku-18堆栈上进行更新。它不再起作用了

此行的目的是在数据库中存储新项目时,将计数器初始化为零。但是,尽管该项是按其应该的方式创建的,但缺少字段dbCount。为什么呢?创建字段的正确代码是什么

以下是beforeSave功能的相关代码供参考:

Parse.Cloud.beforeSave("TheCollection", async (request) => {
 if (!request.object.isNew()) return;
 var query;
 query = new Parse.Query("TheCollection");
 query.equalTo("TITLE",request.object.get("TITLE"));

 await query.find().then
 (function(resUnit) {
  // If there is already a Unit with the same Title, we return an error.
  if (resUnit.length) throw "TITLE-USED";

  var query;
  query = new Parse.Query("TheCollection");
  var token = request.user.getSessionToken();
  query.find({sessionToken: token}).then
  (function(resUnit) {
    ... some useful processing ...
    // This next line is not working as it used to.
    request.object.set("dbCount", 0);
   });
  });
 });

有可能您错过了退货,并且在您的承诺解决之前已经进行了保存。 我还看到您在嵌套范围中使用了相同的变量resUnit,这可能会混淆它的用法

Parse.Cloud.beforeSave("TheCollection", async (request) => {
 if (!request.object.isNew()) return;
 var query;
 query = new Parse.Query("TheCollection");
 query.equalTo("TITLE",request.object.get("TITLE"));

 await query.find().then
 (function(resUnit) {
  // If there is already a Unit with the same Title, we return an error.
  if (resUnit.length) throw "TITLE-USED";

  var query;
  query = new Parse.Query("TheCollection");
  var token = request.user.getSessionToken();
  >>>> return <<<<< query.find({sessionToken: token}).then
  (function(resUnit) {
    ... some useful processing ...
    // This next line is not working as it used to.
    request.object.set("dbCount", 0);
   });
  });
 });

尝试更改查询。查找{sessionToken:token}。然后返回查询。查找{sessionToken:token}。然后我刚刚尝试了。你是对的。这就解决了问题。我接受唯一正确的答案。但我想,在某种程度上,这应该归功于大卫·麦凯多,他在早些时候的一次评论中给出了同样的简短回答。多亏了这两个。
Parse.Cloud.beforeSave("TheCollection", async (request) => {
 if (!request.object.isNew()) return;
 const query = new Parse.Query("TheCollection");
 query.equalTo("TITLE",request.object.get("TITLE"));

 const resUnit1 = await query.first()
 // If there is already a Unit with the same Title, we return an error.
 if (resUnit) throw "TITLE-USED";

  const query2 = new Parse.Query("TheCollection");
  const resUnit2 = await query2.find({sessionToken: request.user.getSessionToken()})
  ... some useful processing ...
  request.object.set("dbCount", 0);
 });