Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么发送请求时不显示忙指示灯?_Javascript_Sapui5 - Fatal编程技术网

Javascript 为什么发送请求时不显示忙指示灯?

Javascript 为什么发送请求时不显示忙指示灯?,javascript,sapui5,Javascript,Sapui5,我有一些缓慢的OData调用,需要向用户呈现某种视觉指示器,表明正在发生某些事情 我已经阅读了API参考,并看到了一些函数,如attachRequestSent(),setBusy(),BusyDialog,BusyIndicator,等等 我试着相应地使用它们,但对我不起作用。问题似乎是oModel.create导致整个应用程序在执行时挂起。在create函数返回之前,应用程序处于冻结状态,因此无法运行加载指示器或任何内容 编辑:我已经设置了一个异步批处理读取OData调用。然后,我将用于处

我有一些缓慢的OData调用,需要向用户呈现某种视觉指示器,表明正在发生某些事情

我已经阅读了API参考,并看到了一些函数,如
attachRequestSent()
setBusy()
BusyDialog
BusyIndicator
,等等

我试着相应地使用它们,但对我不起作用。问题似乎是
oModel.create
导致整个应用程序在执行时挂起。在
create
函数返回之前,应用程序处于冻结状态,因此无法运行加载指示器或任何内容


编辑:我已经设置了一个异步批处理读取OData调用。然后,我将用于处理接收到的数据的代码包装在一个函数中,并在批处理调用的success函数中调用该函数。
这是有效的;在用数据填充字段之前,视图加载,我看到一个忙指示器

oModel.submitBatch(/*fnsucture*/);
这是一个好方法,还是有更好的方法更标准?

检查此线程:


Javascript是异步的,这意味着无论您是否进行调用(这可能需要更长的时间),代码都将被进一步处理。因此,在调用OData服务之前,您需要告诉JS通过延迟对象等待它(使其同步)。

在调用OData之前,显示忙指示灯(锁定整个应用程序屏幕)。与

然后,在odata调用的成功和失败处理程序中,使用

sap.ui.core.BusyIndicator.hide();
它不适用于隐式调用(例如,当您绑定到odata模型时),因此您可以使用request sent事件,但想法是相同的

编辑:您还需要提供一个小的延迟以允许指示器出现,然后在一个小的延迟后使用setTimeout调用您的odata

doStuffWithIndicator: function(){
        sap.ui.core.BusyIndicator.show(0);
        setTimeout(function(){
            doStuff();
            sap.ui.core.BusyIndicator.hide();
        }, 20);

    },
主要问题似乎是
oModel.create
导致整个应用程序在执行时挂起。在
create
函数返回之前,应用程序处于冻结状态,因此无法运行加载指示器或任何内容

听起来您一直在使用现在不推荐使用的
sap.ui.model.odata.ODataModel
,它主要发送同步XHR。同步XHR阻止主线程(=UI线程),直到浏览器收到响应。浏览器无法更新DOM以在往返过程中显示忙碌指示器


如果有人读到这篇文章也有同样的问题,请。它只发送异步请求(AJAX),允许UI线程在浏览器等待响应的同时处理其他任务(例如向DOM添加忙指示器)。

我尝试了这个方法,但没有成功。主要问题似乎是oModel.create导致整个应用程序在执行时挂起。在create函数返回之前,应用程序处于冻结状态,因此无法运行加载指示器或任何内容。这是由于同步XHR造成的:
doStuffWithIndicator: function(){
        sap.ui.core.BusyIndicator.show(0);
        setTimeout(function(){
            doStuff();
            sap.ui.core.BusyIndicator.hide();
        }, 20);

    },