【问题标题】:JS: sequence of execution of functionsJS:函数的执行顺序
【发布时间】:2016-04-07 07:28:56
【问题描述】:

我是一名 Java 开发人员,想了解 JS 如何在函数内部调用函数。

function mainFunction() {
     //some HTTP Call. Callback is done through chaining. (Total execution time: 10s) -> (1)

     //let b = some HTTP Call. Callback is assigned to local variable a. (Total execution time: 5s) -> (2)

      //console.log("Hi") -- (3)

     //Setimeout(500, ......); --(4)

     // some very long piece of code - (Execution time: 60s) -- (5)
}

在时间轴上,上述代码的执行顺序是什么?

第 1 步和第 2 步我们有什么不同(等待中)吗?

如果这些 http 回调利用 AngularJS $http 服务,我们还有什么不同吗?

【问题讨论】:

  • 假设您的意思是专门为异步执行回调:3, 5, 4, 2, 1
  • 要包含异步调用的初始调用,如下所示,其中init 是初始调用,cb 是回调:1init, 2init, 3, 4init, 5, 4cb, 2cb, 1cb

标签: javascript angularjs asynchronous callback


【解决方案1】:

JavaScript 的执行方式是先执行同步语句,然后将异步函数放在队列中。它们以先进先出的方式执行。

以下是执行顺序。

第 1 步和第 2 步有 ajax(async) 调用,因此它们会被注册但不会被调用。

然后第 3 步将打印console.log 作为其非异步代码。

在第 4 步中,它只需要一段代码并由 JavaScript 引擎放入异步队列中。

然后步骤 5 将被调用。

所以到现在我们的异步队列有Step 1,2 & 4

第 5 步执行完成后,编译器评估已放入异步队列的 function/code。第 1 步、第 2 步和第 4 步,但根据他们的时间评估,他们的回调将像第 4 步(400 毫秒)、第 2 步(5 秒)和第 1 步(10 秒)一样执行

【讨论】:

  • @squint 我用他们执行所需的时间更新了答案。感谢先生的提醒。 :)
  • @RohitManglik no..没有线程机制用于运行代码..它将以放置在异步队列中的方式运行代码..第 1 步然后第 2 步然后第 4 步.
猜你喜欢
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多