解析云作业:如何在不等待作业完成的情况下获得作业响应?

时间:2018-06-28 00:48:59

标签: parse-platform parse-server

我正在尝试从云功能执行云任务,基本上是试图弄清楚如何在不等待任务完成的情况下获得任务响应,这对我来说是解析云任务的核心目的。

解析云功能:

export default (request, response) => {
  const user = request.user;
  const { name, ...other } = request.params;

  Parse.Cloud.httpRequest({
    url: SERVER_URL + "/jobs/" + name,
    headers: {
      "X-Parse-Master-Key": MASTER_KEY,
      "X-Parse-Application-Id": APP_ID,
      "Content-Type": "application/json"
    },
    method: "POST",
    body: {
      user: user,
      ...other
    }
  }).then(
    res => {
      response.success(res.headers["x-parse-job-status-id"]);
    },
    error => {
      response.error(error);
    }
  );
};

解析云作业:

export default (request, status) => {
  status.message("Running job uploadJSON.");

  // data
  const { data, user } = request.params;

  status.message("Validating parameters");

  if (user == null) {
    return status.error("Invalid parameter user.");
  }

  if (data == null) {
    return status.error("Invalid parameter data.");
  }

  status.message("Parsing JSON..");

  parseJson(data, user)
    .then(products => {
      // send message to client
      console.log("Parsed JSON with success.");
      status.message("Saving products...");

      // save products objects
      Parse.Object.saveAll(products).then(
        () => {
          status.success("Saved " + products.length + " with success!");
        },
        error => {
          status.error("Error: " + error.message);
        }
      );
    })
    .catch(e => status.error(e));

  console.log("end parse json");
};

我想要的是当解析云函数调用作业时,它应该从返回的标头中获取jobId并将该值显示给客户端,以便客户端可以使用LiveQuery跟踪作业状态。

  • parseJSON是一个异步函数,它返回前提。

问题在于,如果没有发生错误,则在保存所有对象之后,而不是在创建作业时,httpRequest只会在完成所有作业后才接收响应。

我知道我可以使用云功能和数据库中的自定义类来重新创建所需的方式,但是我可以使用Cloud Job找到解决方案吗?

顺便说一句,为什么要完成工作,为什么还要有工作,以便您可以得到带有工作ID的响应?在我看来,行为与云功能完全相同。

控制台日志结果:

  1. “结束解析json”
  2. “成功解析json”
  3. 解析云功能成功执行日志。 //显示parse函数等待作业完成。

对不起,我的英语,与我未提及的问题有关的任何内容,请随时提出。

0 个答案:

没有答案