如何在 javascript 中更改解析服务器中调用的优先级?
How can I change the priority for calls in my parse server in javascript?
我正在构建一个 Web 前端,用户应该能够 select 一些图片并一次删除所有图片。所以我正在尝试这样做:
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);
}
});
}
}
问题是我的脚本总是希望首先销毁它们,然后尝试从我的数据库中取出对象。所以它不会删除任何东西。
所以我的问题是,如何更改解析服务器的优先级调用?
您需要处理 get
请求的异步性质。最简单的解决方案是将您的调用包装在 Promise
中,对任务进行计数,并在所有任务完成后 resolve
Promise
。
我没有你所有的代码,所以这是伪代码,但它应该能说明问题:
function deletePic() {
var inputs = document.querySelectorAll("input[type='checkbox']");
var PicsForDelete = [];
// Promise
var promise = new Promise(function(resolve, reject) {
var fetching = 0;
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].checked == true) {
//Count asynchronous tasks
fetching++;
userPics_query.get(inputs[i].id, {
success: function(picForDelete) {
PicsForDelete.push(picForDelete);
alert(picForDelete.id + " " + PicsForDelete[i]);
//Mark asynchronous task as done
fetching--;
//If all tasks done, resolve
if (fetching == 0) {
resolve();
}
},
error: function(picForDelete, error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
}
//If no tasks registered, resolve immidiately
if (fetching == 0) {
resolve();
}
}).then(function() {
//When all asynchronous tasks is completed, call "destroyItAll"
destroyItAll(PicsForDelete);
});
}
使用 Promises 处理请求。 AJAX 请求是异步的,所以你必须异步处理它
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);
});
我正在构建一个 Web 前端,用户应该能够 select 一些图片并一次删除所有图片。所以我正在尝试这样做:
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);
}
});
}
}
问题是我的脚本总是希望首先销毁它们,然后尝试从我的数据库中取出对象。所以它不会删除任何东西。
所以我的问题是,如何更改解析服务器的优先级调用?
您需要处理 get
请求的异步性质。最简单的解决方案是将您的调用包装在 Promise
中,对任务进行计数,并在所有任务完成后 resolve
Promise
。
我没有你所有的代码,所以这是伪代码,但它应该能说明问题:
function deletePic() {
var inputs = document.querySelectorAll("input[type='checkbox']");
var PicsForDelete = [];
// Promise
var promise = new Promise(function(resolve, reject) {
var fetching = 0;
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].checked == true) {
//Count asynchronous tasks
fetching++;
userPics_query.get(inputs[i].id, {
success: function(picForDelete) {
PicsForDelete.push(picForDelete);
alert(picForDelete.id + " " + PicsForDelete[i]);
//Mark asynchronous task as done
fetching--;
//If all tasks done, resolve
if (fetching == 0) {
resolve();
}
},
error: function(picForDelete, error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
}
//If no tasks registered, resolve immidiately
if (fetching == 0) {
resolve();
}
}).then(function() {
//When all asynchronous tasks is completed, call "destroyItAll"
destroyItAll(PicsForDelete);
});
}
使用 Promises 处理请求。 AJAX 请求是异步的,所以你必须异步处理它
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);
});