我把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);
        }
    });
};

我知道我必须处理承诺。但我不知道如何实现它。

getPictureCountForUser()中的Parse.Query从来没有真正找到什么东西,因为response.success()在错误的地方。我必须把它放在哪里,特别是与calc()之间?

这样每个函数都会在发送response.success()之前等待另一个函数完成。

谢谢!

你可以使用promise但是对于你的特殊情况,如果你不想使用promise你只能使用回调,而不是更多,像这样:

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);
        }
    });
};

最新更新