gpt4 book ai didi

javascript - Parse Cloud Code Promise 的问题

转载 作者:行者123 更新时间:2023-11-28 06:37:43 25 4
gpt4 key购买 nike

我正在尝试使用 Parse Cloud Code 并使用 Promise 来确保消除 cals 异步的任何问题。我想要查询一个类,获取一个对象,构建一些 JSON,然后查询对象的一些关系(标签、裁判)并将它们添加到 JSON 以返回以供 ExpressJS 渲染。我粘贴的代码不起作用,但我不明白为什么每次我都返回项目以进行下一个查询的 promise 。

编辑:

//Return a single project
Parse.Cloud.define('getProject', function(request, response) {
var projectUrl = request.params.projectUrl;

var project;
var projectsData = [];

var Projects = new Parse.Object("projects");
var query = new Parse.Query(Projects);
query.equalTo("projectUrl", projectUrl);
query.find().then(function(projectsResult) {
console.log(projectsResult.length + " Projects returned");

project = projectsResult[0];
var projectData = {
"id": project.get("id"),
"title": project.get("title"),
"previewImage": project.get("previewImage"),
"longDescription": project.get("longDescription"),
"shortDescription": project.get("shortDescription"),
"visibleToPublic": project.get("visibleToPublic"),
"dateStart": project.get("dateStart"),
"dateEnd": project.get("dateEnd"),
updatedAt: project.get("updatedAt"),
projectStatus: project.get("projectStatus")
};

projectsData.push(projectData);
console.log("Step 1. Projects Data: " + JSON.stringify(projectsData));

var tagsQuery = project.relation('tags');
return tagsQuery.query().find();
}).then(function(tags) {
var tagsData = [];
for(var t = 0; t < tags.length; t++) {
var tagData = {
"tag": tags[t].get("tag"),
}
console.log("Tag Data: " + tagData);
tagsData.push(tagData);
}
projectsData[tags] = tagsData;
console.log("Step 2. Tags Data: " + JSON.stringify(tagsData));

var refereesQuery = project.relation('referees');
return refereesQuery.query().find();
}).then(function(referees) {
var refereesData = [];
for(var r = 0; r < referees.length; r++) {
var refereeData = {
"name": referees[r].get("name"),
"role": referees[r].get("role"),
"emailAddress": referees[r].get("emailAddress"),
"phoneNumber": referees[r].get("phoneNumber"),
"linkedInUrl": referees[r].get("linkedInUrl"),
}
console.log("Referee Data: " + refereeData);
refereesData.push(refereeData);
}
projectsData[referees] = refereesData;
console.log("Step 3. Referees Data: " + JSON.stringify(refereesData));

console.log("Everthing should be part of Projects Data here: " + JSON.stringify(projectsData));

response.success(projectsData);
}, function(error) {
response.error("Error: " + error);
});
});

最佳答案

有几个问题:

  • projectsDataprojectData 之间的混淆
  • projectsData 实际上并不是必需的。
  • projectData 需要在创建和分配后使用(或应该)使用的三个位置的范围内。
  • 在多种情况下,只要标准同步流程就足够了,就会使用 .then()。清除不必要的 .thens 将极大地帮助解决范围问题。

除了重新整理代码之外,我得到了以下结果:

Parse.Cloud.define('getProject', function(request, response) {
var Projects = Parse.Object.extend("projects"); // with credit to @kRiZ
var query = new Parse.Query(Projects);
query.equalTo('projectUrl', request.params.projectUrl);
query.find().then(function(projectsResult) {
var project = projectsResult[0];
var projectData = {
'id': project.get('id'),
'title': project.get('title'),
'previewImage': project.get('previewImage'),
'longDescription': project.get('longDescription'),
'shortDescription': project.get('shortDescription'),
'visibleToPublic': project.get('visibleToPublic'),
'dateStart': project.get('dateStart'),
'dateEnd': project.get('dateEnd'),
'updatedAt': project.get('updatedAt'),
'projectStatus': project.get('projectStatus')
};

//Now make the tags query and the referees query in parallel.
var tagsPromise = project.relation('tags').query().find();
var refereesPromise = project.relation('referees').query().find();

// Aggregate the two promises with Parse.Promise.when(), and handle the responses.
return Parse.Promise.when(tagsPromise, refereesPromise).then(function(tags, referees) {
//Process the tags response
projectData.tags = tags.map(function(t) {
return {
'tag': t.get('tag')
};
});
//Process the referees response
projectData.referees = referees.map(function(r) {
return {
'name': r.get('name'),
'role': r.get('role'),
'emailAddress': r.get('emailAddress'),
'phoneNumber': r.get('phoneNumber'),
'linkedInUrl': r.get('linkedInUrl')
};
});
// Yay!
response.success(projectData);
});
}).fail(function(error) {
response.error('Error: ' + error);
});
});

除了整体重新安排外,唯一实质性的变化是:

  • 使用 Array#map() 将一个数组映射到另一个数组。
  • 并行进行两个查询,并使用 Parse.Promise.when() 聚合两个 Promise。

关于javascript - Parse Cloud Code Promise 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34124443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com