2014-04-26 44 views
0

我試圖在將有關該行的信息插入數據庫後刪除表中的一行,然後將其刪除。工作燈調用循環中的過程錯誤

但問題是該行不會被刪除,因爲它似乎是在後臺進程中運行的WL調用過程,所以循環一直運行,直到它在程序完成之前到達終點。有什麼辦法讓循環可以先等待調用過程完成,然後繼續循環?

這裏是我的代碼

var table = document.getElementById('table_cart'); 
for (var r = 1, n = table.rows.length; r < n; r++) { 
    var barcode = table.rows[r].cells[0].innerHTML; 
    var name = table.rows[r].cells[1].innerHTML; 
    var total = table.rows[r].cells[2].innerHTML; 
    var price = table.rows[r].cells[3].innerHTML; 
    var invocationData = { 
     adapter: 'ProductAdapter', 
     procedure: 'add', 
     parameters: [barcode, total, price] //nama produk,jmlh 
    }; 
    WL.Client.invokeProcedure(invocationData, { 
     onSuccess: function (response) { 
      alert(total + " " + name + " order success"); 
      //table.rows[r].innerHTML = ""; 
      //table.removeChild(table.rows[r]); 

      //table.deleteRow(r);//blm bisa apus cartnya 
      alert(r); 
      document.getElementById('table_cart').deleteRow(r); 
     }, 
     onFailure: function (response) { 
      alert("error connecting to server"); 
     } 
    }); 
} 

回答

1

在工作燈的所有過程調用都是異步的 - 所以寫2的過程時的呼聲此起彼伏,你可以不知道,如果最後一次通話結束。 如果您想確保下一個過程調用僅在第一個調用完成後發生,則應該在第一次調用的onSuccess回調方法內放置第二個過程調用。

0

其實我認爲你想要做的是將它添加到數據庫後從HTML中刪除行,所以我認爲你應該做的只是進展到下一行(r ++)onSuccess的適配器請求。在那裏你從HTML中刪除行,然後進行到下一行。

+0

我試圖刪除onSuccess上的行,但它不會刪除,因爲它是異步的。到調用過程完成時,循環已經完成,因此r值總是在循環的末尾 – stephen1706