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