我应该把 response.success() 放在哪里?
Where do I put response.success()?
我是 Parse 的新手,我刚刚创建了我的第一个云代码,我 运行 遇到了一个 Parse.Query
没有完成的问题,因为显然 response.success()
会被叫得太早了。
Parse.Cloud.beforeSave("items",function(request,response){
hasPictures = calc(request);
request.object.set("hasPictures",hasPictures);
response.success();
});
function calc(request){
var hasPictures = false;
var userPictureCount = getPictureCountForUser(request.object.get("uniqueIdentifier"));
// something else is being calculated here. removed it so simplify
if(userPictureCount > 0)
hasPictures = true;
return hasPictures;
}
var getPictureCountForUser = function(uniqueIdentifier){
var query = new Parse.Query("items");
if(Parse.User.current()){
a.equalTo("userId", Parse.User.current().id);
}else{
query.equalTo("uniqueIdentifier", uniqueIdentifier);
}
query.find({
success: function(results){
//console.log(results.length + ' pictures found!');
console.log(results);
// return results.length;
response.success(results);
},
error: function(error) {
response.error("Query failed. Error = " + error.message);
}
});
};
我知道我必须以某种方式处理 Promises。但是不知道怎么实现。
getPictureCountForUser()
中的 Parse.Query
从未真正找到任何东西,因为 response.success()
在错误的位置。我必须把它放在哪里,尤其是中间的 calc()
?
这样每个函数都会等待另一个函数完成后再发送 response.success()
。
谢谢!
你可以使用 promises 但对于你的特定情况,如果你不想使用 promises 你可以只使用回调,没有更多,像这样:
Parse.Cloud.beforeSave("items",function(request,response){
hasPictures = calc(request, function(hasPictures) {
// i don't know your logic, you could do a response.success of failure, what do you need
request.object.set("hasPictures",hasPictures);
response.success();
});
});
function calc(request, callback){
var hasPictures = false;
getPictureCountForUser(request.object.get("uniqueIdentifier"), function(userPictureCount) {
if(userPictureCount > 0)
hasPictures = true;
callback(hasPictures);
});
};
var getPictureCountForUser = function(uniqueIdentifier, callback){
var query = new Parse.Query("items");
if(Parse.User.current()){
a.equalTo("userId", Parse.User.current().id);
}else{
query.equalTo("uniqueIdentifier", uniqueIdentifier);
}
query.find({
success: function(results){
callback(results.length);
},
error: function(error) {
callback(-1);
//response.error("Query failed. Error = " + error.message);
}
});
};
我是 Parse 的新手,我刚刚创建了我的第一个云代码,我 运行 遇到了一个 Parse.Query
没有完成的问题,因为显然 response.success()
会被叫得太早了。
Parse.Cloud.beforeSave("items",function(request,response){
hasPictures = calc(request);
request.object.set("hasPictures",hasPictures);
response.success();
});
function calc(request){
var hasPictures = false;
var userPictureCount = getPictureCountForUser(request.object.get("uniqueIdentifier"));
// something else is being calculated here. removed it so simplify
if(userPictureCount > 0)
hasPictures = true;
return hasPictures;
}
var getPictureCountForUser = function(uniqueIdentifier){
var query = new Parse.Query("items");
if(Parse.User.current()){
a.equalTo("userId", Parse.User.current().id);
}else{
query.equalTo("uniqueIdentifier", uniqueIdentifier);
}
query.find({
success: function(results){
//console.log(results.length + ' pictures found!');
console.log(results);
// return results.length;
response.success(results);
},
error: function(error) {
response.error("Query failed. Error = " + error.message);
}
});
};
我知道我必须以某种方式处理 Promises。但是不知道怎么实现。
getPictureCountForUser()
中的 Parse.Query
从未真正找到任何东西,因为 response.success()
在错误的位置。我必须把它放在哪里,尤其是中间的 calc()
?
这样每个函数都会等待另一个函数完成后再发送 response.success()
。
谢谢!
你可以使用 promises 但对于你的特定情况,如果你不想使用 promises 你可以只使用回调,没有更多,像这样:
Parse.Cloud.beforeSave("items",function(request,response){
hasPictures = calc(request, function(hasPictures) {
// i don't know your logic, you could do a response.success of failure, what do you need
request.object.set("hasPictures",hasPictures);
response.success();
});
});
function calc(request, callback){
var hasPictures = false;
getPictureCountForUser(request.object.get("uniqueIdentifier"), function(userPictureCount) {
if(userPictureCount > 0)
hasPictures = true;
callback(hasPictures);
});
};
var getPictureCountForUser = function(uniqueIdentifier, callback){
var query = new Parse.Query("items");
if(Parse.User.current()){
a.equalTo("userId", Parse.User.current().id);
}else{
query.equalTo("uniqueIdentifier", uniqueIdentifier);
}
query.find({
success: function(results){
callback(results.length);
},
error: function(error) {
callback(-1);
//response.error("Query failed. Error = " + error.message);
}
});
};