Search code examples
javascriptparse-platform

How can I change the priority for calls in my parse server in javascript?


I'm building a webfrontend and the user should be able to select some pictures and delete all of them at a time. So I'm trying it with this:

function deletePic(){
    var inputs = document.querySelectorAll("input[type='checkbox']");
    var PicsForDelete =[];

    for(var i = 0; i < inputs.length; i++) {
        if(inputs[i].checked == true){
            userPics_query.get(inputs[i].id, {
                 success: function(picForDelete) {
                   PicsForDelete.push(picForDelete);
                   alert(picForDelete.id +" " + PicsForDelete[i]);
                 },
                 error: function(picForDelete, error) {
                   alert("Error: " + error.code + " " + error.message);
                 }
            });
        }
    }

    destroyItAll(PicsForDelete);
}

function destroyItAll(PicsForDelete){
    if(confirm("Press 'OK' to delete "+PicsForDelete.length +" pictures!")){
        Parse.Object.destroyAll(PicsForDelete,{
            success: function(myObject) {
                alert(PicsForDelete.length + " Images successfully deleted!");
            },
            error: function(myObject, error) {
                alert("Error: " + error.code + " " + error.message);
            }
        });
    }
}

The problem is that my script always want FIRST to destroy them all and THEN try to get the objects out of my DB. So it doesn't delete anything.

So my question is, how can I change the priority call for my parse server?


Solution

  • Use Promises for handle the requests. An AJAX request is async, so you must handle it asynchronyosly

    var imgPromises = [];
    for(var i = 0; i < inputs.length; i++) {
        if(inputs[i].checked == true){
            var imgForDelPromise = new Promise(function (resolve) {
                userPics_query.get(inputs[i].id, {
                    success: function(picForDelete) {
                        resolve(picForDelete);
                    },
                    error: function(picForDelete, error) {
                        alert("Error: " + error.code + " " + error.message);
                    }
                });
            });
            imgPromises.push(imgForDelPromise);
        }
    }
    
    Promise.all(imgPromises).then(function (imgs) {
        destroyItAll(imgs);
    });