我有一个SAPUI5 Fiori web应用程序是用JavaScript编写的。应用程序包含多个视图,我有一个NavBar在视图之间导航。视图通过路由机制加载到NavContainer元素(请参阅:SAPUI5中的嵌套导航)。
我的问题是:当我用谷歌Chrome启动应用程序时,一切都很好。当我在IE11或Edge中启动应用程序时,路由不工作。没有错误消息,但是当我想导航时,视图不会改变。
现在,我需要对代码进行分析,发现当我的控制器中有任何异步函数时,当我使用等待时,路由就不能工作了。当我从控制器中移除所有异步函数和等待时,路由就会正常工作。
我已经尝试过从我的控制器中删除“使用严格”,并且我也在我的index.html中加载了多填充文件,但是它也不能解决我的问题。
有人知道我怎么能解决这个问题吗?因为我需要在控制器中调用异步函数。
任何帮助都是非常感谢的,谢谢。
我的控制器代码如下所示:
ProductSelection.controller.js
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
"sap/ui/model/Filter",
"sap/ui/model/FilterOperator",
"sap/ui/model/resource/ResourceModel"
], function (Controller, JSONModel, Filter, FilterOperator) {
"use strict";
return Controller.extend("CS_MOE.Demo.controller.ProductSelection", {
onInit: function () {
this.getView().addEventDelegate({
onBeforeShow: this.onBeforeShow
}, this);
},
onBeforeShow: function (e) {
},
getProducts: async function (criteria) {
var showMore = this.lastMatnr !== "";
this.setTableProductBusy(true, showMore);
var oProductFilter = new Filter("Suche", FilterOperator.Contains, criteria);
var oIndexFilter = new Filter("Last_Matnr", FilterOperator.EQ, this.lastMatnr);
var oFilters = [oProductFilter, oIndexFilter];
var result = await this.execRequest(oFilters, "/ARTICLESSet");
},
//function to trigger GET-Request for given filters and "target"-EntitySet - promise is used to fulfill the async/await functions
execRequest: async function (oFilters, entitySet) {
var oArtikelODataService = this.getOwnerComponent().getModel("productService");
return new Promise(function (resolve, reject) {
oArtikelODataService.read(entitySet, {
filters: oFilters,
async: true,
success: function (response) {
var oResponse = response.results;
resolve(oResponse);
},
error: function (oError) {
console.log(oError);
}
});
});
}
});
});发布于 2019-07-31 08:00:59
在异步/等待之前有一段时间,也有可能完成异步操作。
而不是await this.execRequest(oFilters, "/ARTICLESSet"),您可以执行this.execRequest(oFilters, "/ARTICLESSet").then(...)。
或者简单地执行return this.execRequest(oFilters, "/ARTICLESSet"),然后当您调用getProducts时,您可以执行this.getProducts(sCriteria).then(...);
如果您真的想使用异步/等待,您必须设置Babel,这将传输您的代码,因此它在部署时在IE11中工作。
https://stackoverflow.com/questions/57254774
复制相似问题