首页 > 解决方案 > 解析云代码函数响应成功不是函数

问题描述

我正在尝试从 iOS 客户端调用 Parse Cloud 函数,但 response.success() 函数似乎为空。我收到一条错误消息,说 response.success 不是服务器上的函数。

这是我的解析云函数:

Parse.Cloud.define("pruebaQuery", function(request, response) {
  const query = new Parse.Query("grupo");
  query.equalTo("name", request.params.grupoName);
  query.find()
    .then((results) => {
      for (let i = 0; i < results.length; ++i) {
        var grupoId = results[i].get("grupoId");
        console.log("GrupoId: " + grupoId);
      }
      response.success("Success pruebaQuery");
    })
    .catch(() =>  {
      response.error("grupo lookup failed");
    });
});

这就是我从 iOS 客户端调用它的方式:

[PFCloud callFunctionInBackground:@"pruebaQuery" withParameters:@{@"grupoName": @"Kinder 3"} 
block:^(NSString *object, NSError *error) {
        if (!error) {
            NSLog(@"CLOUDCode/SUCCESS: %@", object);
        }
        else {
            NSLog(@"CLOUDCode/ERROR %@  code: %ld", error, (long)[error code]);
        }
    }];

为什么 response.success() 函数不起作用的任何线索?

标签: node.jsparse-platformparse-serverparse-cloud-code

解决方案


从解析服务器版本 ^3.0.0 开始,云代码不再使用回调。您可以使用 promise 或 async 函数。以下是您应该如何更改云功能。

Parse.Cloud.define("pruebaQuery", async request=> {
    const query = new Parse.Query("grupo");
    query.equalTo("name", request.params.grupoName);

    let results;
    try{
        results = await query.find();

        for (let i = 0; i < results.length; ++i) {
        let grupoId = results[i].get("grupoId");
        console.log("GrupoId: " + grupoId);
       }

    } catch(error){
        throw error.message;
    }

});

推荐阅读