首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SAPUI5 -异步函数存在时的路由问题

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

Stack Overflow用户
提问于 2019-07-29 13:18:56
回答 1查看 821关注 0票数 0

我有一个SAPUI5 Fiori web应用程序是用JavaScript编写的。应用程序包含多个视图,我有一个NavBar在视图之间导航。视图通过路由机制加载到NavContainer元素(请参阅:SAPUI5中的嵌套导航)。

我的问题是:当我用谷歌Chrome启动应用程序时,一切都很好。当我在IE11Edge中启动应用程序时,路由不工作。没有错误消息,但是当我想导航时,视图不会改变。

现在,我需要对代码进行分析,发现当我的控制器中有任何异步函数时,当我使用等待时,路由就不能工作了。当我从控制器中移除所有异步函数和等待时,路由就会正常工作。

我已经尝试过从我的控制器中删除“使用严格”,并且我也在我的index.html中加载了多填充文件,但是它也不能解决我的问题。

有人知道我怎么能解决这个问题吗?因为我需要在控制器中调用异步函数。

任何帮助都是非常感谢的,谢谢。

我的控制器代码如下所示:

ProductSelection.controller.js

代码语言:javascript
运行
复制
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);
                    }
                });
            });
        }

    });

});
EN

回答 1

Stack Overflow用户

发布于 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中工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57254774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档