Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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_Asynchronous_Callback - Fatal编程技术网

了解Javascript异步块和回调

了解Javascript异步块和回调,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,假设doA()和doD()是异步调用,我们有以下顺序: A->B-C->D->E->F 调用,返回函数1并将其发送到队列 打电话给B 不再执行->执行队列中的内容->调用C 调用D,返回函数2并将其发送到队列 叫E, 6-无需执行->调用F 我的推理是否真的正确? 我完全错了吗 这个问题来自于阅读凯尔·辛普森的《你不懂Javascript》一书。你就快到了 真的很难理解这种行为到底会变成什么样子。与异步运行的其他函数相比,每个函数调用的时间和强度可能有所不同 您缺少的另一部分是,“functio

假设doA()和doD()是异步调用,我们有以下顺序: A->B-C->D->E->F

  • 调用,返回函数1并将其发送到队列
  • 打电话给B
  • 不再执行->执行队列中的内容->调用C
  • 调用D,返回函数2并将其发送到队列
  • 叫E,
  • 6-无需执行->调用F
  • 我的推理是否真的正确? 我完全错了吗

    这个问题来自于阅读凯尔·辛普森的《你不懂Javascript》一书。

    你就快到了

    真的很难理解这种行为到底会变成什么样子。与异步运行的其他函数相比,每个函数调用的时间和强度可能有所不同


    您缺少的另一部分是,“function1”在返回函数“doA”时不会固有地调用。为了使“function1”能够运行,需要“doA”在其运行期间的某个时间发出回调()。否则,“doA”将直接返回,并且不会调用您编写的任何嵌套函数。

    这本书似乎做得很好,您已经很好地理解了基础知识:-)

    一些小点可能会使您的推理更加精确:

  • “假设doA()和doD()是异步调用”-假设
    doA
    doB
    是异步调用作为参数传递给它们的回调函数的(“异步”)函数。我们还可以进一步限制它们只调用相应的回调一次(以避免混淆)

  • “将函数1发送到队列”-它可能不会立即执行此操作。这就是后台处理的全部要点,只有当相应的任务(由
    doA()
    doD()
    启动)完成时,回调才会排队。一个简单的例子是超时。如果等待多个异步回调,则可能会按照任意顺序调用它们,这取决于它们的任务所花的时间。
    类似地,当没有更多的东西要执行时,它可能需要等待队列中出现一些东西,并且只要没有东西,它就处于空闲状态

  • “队列中有什么->调用C”-事实上,
    function1
    在队列中,然后调用
    doC()
    和其他函数。您不应该跳过此步骤:-)调用
    doF()
    也一样

  • doA( function1(){
        doC();
    
        doD( function2(){
            doF();
        } )
    
        doE();
    } );
    
    doB();