Sapui5 UI5消息框同步器
嗨,我在for循环中实现了一个Messagebox,但我知道Messagebox是异步工作的。 我希望程序等待用户决定的每个循环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",
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”首先,你不应该更改帖子中的原始代码,因为这会使提供的答案变得无关紧要——最好进行编辑并添加修改后的代码。其次,正如我前面所说的,你不能再使用varI
,因为你现在使用的是一个自动执行函数,它充当闭包de>i现在通过innerArg
传递,在我的示例OK中,但使用'innerArg'时,程序跳转到'do'方法是的,因为您的代码不正确;请仔细查看我提供的语法:(函数(innerArg){……})(i);
yourSave
方法(同步执行)不等待异步调用完成;正如我前面提到的,您应该使用承诺(有关更多信息,请参阅)谢谢,但我可以在循环结束时使用resolve,这也是asynrchon,他跳入了save方法。我现在完全不知道如何使用它:/谢谢你的帮助!这只是标准的Javascript;使用Promise.all()捕捉消息框动作(所以在所有消息框关闭后它会解析)并在resolve回调函数中执行save,但我只打开了一个消息框。对于java脚本,这是确认方法,UI5插入程序是否没有那么复杂的事情?因为我不明白承诺:/请参阅我更新的答案。在旁注中,我建议深入了解如何处理asyn使用回调函数和承诺的异步处理;虽然同步处理似乎更容易编码,但异步处理有很多好处。愉快的编码!:)