2015-11-06 83 views
0

我想写一个Parse.com云代码函数来完成以下工作流程分支:解析云代码:逻辑在承诺

  1. 用户提交的值。
  2. 云代码函数检查该值是否与code类型的任何对象匹配。
  3. 如果不是,则该函数返回“not found”值。
  4. 如果是这样,code类型的对象被假定为具有指向item类型对象的指针。
  5. 然后,检查code.item以查看它是否具有指向alert类型对象的指针。
  6. 如果不是,则该函数返回“not found”值。
  7. 如果code.item.alert确实存在,那么我想获取完整的alert对象,包括可能存在或不存在的指针,最多2层深。

当我开始写代码这个功能,我可以得到它的工作,以检查看code是否存在的点,如果是这样,code.item.alert是否也存在。

这是问题出现的地方。就目前而言,在我的函数的工作版本中,返回的alert项只是类类型和objectId。我明白为什么会发生这种情况,并且我正在尝试编写代码来在返回对象之前填充对象,但是我没有做到这一点。

下面是工作,到目前为止(但只返回alert对象的shell)代码:

Parse.Cloud.define("alertLookup", function (request, response) { 
    Parse.Cloud.useMasterKey(); 

    var codeQuery  = new Parse.Query("code"); 
    codeQuery.equalTo("value", request.params.code); 
    codeQuery.include("item"); 

    codeQuery.find().then(function (codes) { 
     if (codes.length === 0) { 
      response.success("no item"); 
     } else { 
      var code = codes[0]; 
      var item = code.get("item"); 
      var alert = item.get("alert"); 
      if (alert === null || alert === undefined) { 
       response.success("no item"); 
      } else { 
       response.success(alert); 
      } 
     }  
    }, function (error) { 
     response.error(error); 
    }); 
}); 

这是我已尝试与141错误代码失败:

Parse.Cloud.define("alertLookup", function (request, response) { 
    Parse.Cloud.useMasterKey(); 

    var codeQuery  = new Parse.Query("code"); 
    codeQuery.equalTo("value", request.params.code); 
    codeQuery.include("item"); 

    codeQuery.find().then(function (codes) { 
     if (codes.length === 0) { 
      response.success("no item"); 
     } else { 
      var code = codes[0]; 
      var item = code.get("item"); 
      var alert = item.get("alert"); 
      if (alert === null || alert === undefined) { 
       response.success("no item"); 
      } else { 
       return alert.fetch();     
      } 
     }  
    }).then(function (a) { 
     response.success(a); 

    }, function (error) { 
     response.error(error); 
    }); 
}); 

为什么fetch()电话不能正常工作?当我插入console.log()语句时,虽然alert非空,但return alert.fetch();似乎不会被调用。至少,response.success(a);行永远不会被调用。为什么不?

+0

的就是你得到的141错误信息? –

+0

“未定义”。而已。 – mbm29414

回答

0

试试这个链接时承诺:

codeQuery.find().then(function (codes) { 
    if (codes.length != 0) { 
     var code = codes[0]; 
     var item = code.get("item"); 
     var alert = item.get("alert"); 
     if (alert != null && alert != undefined) { 
      var alertObj = new Parse.Object("alert"); // alert class ??? 
      alertObj.id = alert.id; 
      return alertObj.fetch();     
     } 
    } 
    // return a Promise for no items 
    return Parse.Promise.as("no item"); 

}).then(function (a) { 
    response.success(a); 

}, function (error) { 
    response.error(error); 
}); 
+0

感谢您的回复,但对我而言,结果相同。而且,正如你所看到的,我得到的错误信息是毫无价值的。即使是解析控制台日志/错误日志也不会给我提供任何信息。 – mbm29414

+0

141错误通常是JavaScript引擎的脚本错误。我怀疑你的问题是在'alert'变量上调用'fetch',它可能不是一个Parse对象。我在代码中进行了一些更改,以确保您在代表“alert”对象的Parse对象上调用“fetch”。 –

+0

同样的事情。我相信所有这些方法都应该起作用,但我不明白为什么它们不是。当我把它分解成2个函数时,我有点工作,但对我来说这似乎很笨拙。而且,即使在第二种方法中,它也以奇怪和意想不到的方式突破。我对Parse越来越沮丧。 – mbm29414