我正在尝试从云功能执行云任务,基本上是试图弄清楚如何在不等待任务完成的情况下获得任务响应,这对我来说是解析云任务的核心目的。
解析云功能:
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跟踪作业状态。
问题在于,如果没有发生错误,则在保存所有对象之后,而不是在创建作业时,httpRequest只会在完成所有作业后才接收响应。
我知道我可以使用云功能和数据库中的自定义类来重新创建所需的方式,但是我可以使用Cloud Job找到解决方案吗?
顺便说一句,为什么要完成工作,为什么还要有工作,以便您可以得到带有工作ID的响应?在我看来,行为与云功能完全相同。
控制台日志结果:
对不起,我的英语,与我未提及的问题有关的任何内容,请随时提出。