Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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/Java中延迟函数内的代码执行_Java_Javascript_Ajax_Jsp_Dojo - Fatal编程技术网

在Javascript/Java中延迟函数内的代码执行

在Javascript/Java中延迟函数内的代码执行,java,javascript,ajax,jsp,dojo,Java,Javascript,Ajax,Jsp,Dojo,我有一个onclick javascript函数(通过.jsp文件从DOJO组件调用),其中两个UI组件同时加载到js文件中(通过对Spring控制器(java文件)的AJAX调用并返回到jsp/javascript文件) 问题在于,第二个组件在第一个组件之前加载,并且没有显示规定的数据。我想知道如何在调用javascript中的代码以毫秒为单位延迟第二个组件之前设置延迟 注: 我在我的控制器中使用了Thread.sleep(毫秒),它似乎工作得很好,解决了我的问题。但我不想使用它,因为我知道它

我有一个onclick javascript函数(通过.jsp文件从DOJO组件调用),其中两个UI组件同时加载到js文件中(通过对Spring控制器(java文件)的AJAX调用并返回到jsp/javascript文件)

问题在于,第二个组件在第一个组件之前加载,并且没有显示规定的数据。我想知道如何在调用javascript中的代码以毫秒为单位延迟第二个组件之前设置延迟

注:

  • 我在我的控制器中使用了Thread.sleep(毫秒),它似乎工作得很好,解决了我的问题。但我不想使用它,因为我知道它带来的风险。因此,请求一个替代方案,而不是这个

  • 我还使用了setTimeOut()函数,但setTimeOut()需要一个函数作为参数。我只需要第一次将函数中的代码延迟几毫秒。从第二次开始,我不想延迟调用代码


  • 请求你的宝贵意见

    JavaScript不允许阻塞线程,因此您可以使用的唯一选项是setTimeOut()函数。
    或者,当第一个组件在加载时通知第二个组件,此时第二个组件重新加载自己时,您可以实现该机制。

    也许您的问题可以通过使用来解决,以确保dom完全加载

    或者使用dojo/deffered


    延迟代码的执行不是一个好主意。在开发中,调用可能会按照您想要的顺序执行和返回。但在系统负载较低的生产环境中,执行服务器调用的时间可能不一致

    我假设您正在使用
    dojo/xhr
    进行ajax调用,您的解决方案是使用
    DeferredList


    可以使用ajax回调链接控件的加载吗?如果不是的话,您可以查看dojo,让您的控件自己链接起来
    var d1 = xhr(...);
        d2 = xhr(...);
    
    var dl = new DeferredList([d1, d2]);
    
    dl.then(function(result){
        // Execute the code that requires both calls to be completed.
    });