worklight在循环错误中调用过程

时间:2014-04-26 17:18:35

标签: javascript ibm-mobilefirst worklight-adapters

我尝试在将有关该行的信息插入数据库后删除表中的行,然后将其删除。

但问题是该行不会被删除,因为看起来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");
         }
     });
 }

2 个答案:

答案 0 :(得分:1)

在Worklight中,所有过程调用都是异步的 - 因此当一个接一个地写入2个过程调用时,您无法知道上次调用是否已完成。 如果你想确保你的下一个程序调用仅在第一个程序完成后发生,你应该将第二个程序调用放在你第一次调用的onSuccess回调方法中。

答案 1 :(得分:0)

实际上我认为你想要做的是在将数据库添加到数据库后从HTML中删除该行,所以我认为你应该做的只是进入适配器onSuccess的下一行(r ++)请求。在那里,您从HTML中删除该行,然后才进入下一行。