Sapui5 UI5消息框同步器

Sapui5 UI5消息框同步器,sapui5,messagebox,Sapui5,Messagebox,嗨,我在for循环中实现了一个Messagebox,但我知道Messagebox是异步工作的。 我希望程序等待用户决定的每个循环 onBook: function(oEvent) { var that = this; for (var i = 0; i < Items.length; i++){ function message(innerArg) { sap.m.MessageBox.confirm( "Text",

嗨,我在for循环中实现了一个Messagebox,但我知道Messagebox是异步工作的。 我希望程序等待用户决定的每个循环

onBook: function(oEvent) {
  var that = this;
  for (var i = 0; i < Items.length; i++){

      function message(innerArg) {
        sap.m.MessageBox.confirm(
                "Text", {
                  icon : sap.m.MessageBox.Icon.INFORMATION,
                  title : "Really",
                  actions : [ sap.m.MessageBox.Action.YES,
                      sap.m.MessageBox.Action.NO ],
                  onClose : function(oAction) {
                    if (oAction === sap.m.MessageBox.Action.NO) {
                     delete(i);
                    }else{

                    }
                  }
                });
        }

        message(i);

  }
 that.do(oEvent); 
onBook:function(oEvent){
var=这个;
对于(变量i=0;i
在用户操作完成之前,程序跳入“do”方法

编辑:

      for (var i = 0; i < Items.length; i++){

      (function (innerArg) {
        sap.m.MessageBox.confirm(
                "Delete?", {
                  icon : sap.m.MessageBox.Icon.INFORMATION,
                  title : "Delete",
                  actions : [ sap.m.MessageBox.Action.YES,
                      sap.m.MessageBox.Action.NO ],
                  onClose : function(oAction) {
                    if (oAction === sap.m.MessageBox.Action.NO) {
                     delete(innerArg)
                  }}
                });
        })(i);   

  }
 that.Save(oEvent);
for(变量i=0;i

当框打开时,条目被预订,因为程序在不等待用户操作的情况下进入保存方法。有什么问题吗?

啊,异步函数在同步循环反模式;-)

您可以尝试使用闭包:

for(变量i=0;i
编辑:用承诺更新 根据您更新的问题,我提供了一个或多或少的工作示例(它可能无法完美工作,但应该显示您应该遵循的设计模式)

将消息框响应包装到Promise resolve中,并将其存储到数组中。然后将该数组馈送到Promise.all()以继续执行保存功能

processData:function(){
var承诺=[],
self=这个;
对于(变量i=0;i
它实际上不起作用,如果用户按“否”,我想删除一些条目,在循环结束后我想预订剩余条目。您有什么提示吗?它应该起作用;但是请记住,您不能再使用变量
I
。但是如果您想在退出循环后通过操纵结果返回同步模式,我会选择“real”首先,你不应该更改帖子中的原始代码,因为这会使提供的答案变得无关紧要——最好进行编辑并添加修改后的代码。其次,正如我前面所说的,你不能再使用var
I
,因为你现在使用的是一个自动执行函数,它充当闭包de>i
现在通过
innerArg
传递,在我的示例OK中,但使用'innerArg'时,程序跳转到'do'方法是的,因为您的代码不正确;请仔细查看我提供的语法:
(函数(innerArg){……})(i);
your
Save
方法(同步执行)不等待异步调用完成;正如我前面提到的,您应该使用承诺(有关更多信息,请参阅)谢谢,但我可以在循环结束时使用resolve,这也是asynrchon,他跳入了save方法。我现在完全不知道如何使用它:/谢谢你的帮助!这只是标准的Javascript;使用Promise.all()捕捉消息框动作(所以在所有消息框关闭后它会解析)并在resolve回调函数中执行save,但我只打开了一个消息框。对于java脚本,这是确认方法,UI5插入程序是否没有那么复杂的事情?因为我不明白承诺:/请参阅我更新的答案。在旁注中,我建议深入了解如何处理asyn使用回调函数和承诺的异步处理;虽然同步处理似乎更容易编码,但异步处理有很多好处。愉快的编码!:)