javascript - SAPUI5 - 存在异步函数时的路由问题

标签 javascript html controller sapui5 async.js

我有一个用 JavaScript 编写的 SAPUI5 Fiori Web 应用程序。该应用程序包含多个 View ,我有一个导航栏可以在 View 之间导航。 View 通过路由机制加载到 NavContainer 元素中(请参阅: Nested Navigation in SAPUI5 )。

我的问题:当我在 Google Chrome 中启动应用程序时,一切正常。当我在 IE11Edge 中启动应用程序时,路由不起作用。没有错误消息,但当我想要导航时 View 不会改变。

现在我开始分析代码,发现当我的 Controller 中有任何 async 函数并且使用 await 时,路由不会工作。当我从 Controller 中删除所有异步函数和等待时,路由工作正常。

我已经尝试从我的 Controller 中删除“use strict”,并且还在我的index.html中加载了polyfill文件,但这也没有解决我的问题。

有谁知道我该如何解决这个问题?因为我需要在 Controller 中调用异步函数。

感谢任何帮助,谢谢。

我的 Controller 代码如下所示:

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);
                    }
                });
            });
        }

    });

});

最佳答案

在 async/await 之前曾经有一段时间,也可以执行异步操作。

您可以执行 this.execRequest(oFilters, "/ARTICLESSet").then(...),而不是 await this.execRequest(oFilters, "/ARTICLESSet").

或者简单地执行return this.execRequest(oFilters, "/ARTICLESSet"),稍后当您调用getProducts时,您可以执行this.getProducts(sCriteria) .then(...);

如果你确实想使用 async/await,你必须设置 Babel,它会转译你的代码,以便部署时可以在 IE11 中运行。

关于javascript - SAPUI5 - 存在异步函数时的路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57254774/

相关文章:

javascript - html页面在DOM操作过程中晃动很大,如何处理?

Javascript:如何获取字符串中的前 4 个数字?

javascript - 如何避免提交不在建议数据列表中的文本

javascript - 如何使用 ID 从点击事件的 JSON 文件中获取值并在表单中显示值

java - spring中的model和session有什么区别

JavaScript - 获取区域 map 形状的坐标

javascript - 使用react js隐藏行的特定元素

javascript - 为什么这个重绘/回流 hack 有效?

api - golang 缺少 len 参数

controller - 在没有 URL 重定向的情况下分派(dispatch)给 Kohana 中其他 Controller 的 Controller ?