有没有一种很好的方法来获得多个AJAX删除请求的结果?

时间:2018-04-04 11:14:28

标签: javascript ajax

我有一个选定的id列表:

[1, 3, 5, 7]

我有删除网址删除所选项目:

/api/users/<pk>/delete/

但是网址每次只能传递一个id

因此,应使用for循环删除所选项目。

删除方法如下,delete_url(id)是网址,(response) => {}是成功回调,最后一个是错误回调:

this.$http.delete(delete_url(id), (response) => {

}, (error) => {

})

您知道有一次只能删除一个项目,但如果我使用for循环执行该方法,我怎么知道所有删除请求何时执行完成?我怎么知道它是否会删除所有成功?

2 个答案:

答案 0 :(得分:0)

你可以通过写一个递归函数来做到这一点,其中成功回调你调用你的递归函数。例如

function deleteMany(index=0){
     if (index < deleteArray.length){
         var id = deleteArray[index]
         this.$http.delete(delete_url(id), (response) => {
             deleteMany(index+1)
         }, (error) => {
           //your error handling logic here

         })
     } 
}

答案 1 :(得分:0)

您可以使用for循环执行此操作。 for循环立即发送所有请求,然后计算请求回调触发的次数,一旦该数字与您知道所有请求已完成的数组的长度匹配。

var someArray = [1, 3, 5, 7],
    someArrayLength = someArray.length
    callbackCount = 0,
    i,

for (i = 0; i < someArrayLength; i++) {
  this.$http.delete(delete_url(someArray[i]), (response) => {
    callbackCount++;

    if (callbackCount === someArrayLength) {
      // All callbacks have been made you can continue on
    }
  }, (error) => {
    callbackCount++

    if (callbackCount === someArrayLength) {
      // All callbacks have been made you can continue on
    }
  })
}

注意:由于错误案例和正常案例是隔离的,我必须添加if检查两次