【问题标题】:what is order will the functions foo and bar be executed?函数 foo 和 bar 的执行顺序是什么?
【发布时间】:2022-01-18 11:54:24
【问题描述】:

我不明白 foo 和 bar 函数的执行顺序是什么?

1- foo 和 bar 将同时执行,或者 2- foo 然后 bar 或 3- bar 然后 foo,我认为 1- 但我不确定

var res = {};

function foo(results) {
    res.foo = results;
}

function bar(results) {
    res.bar = results;
}

// ajax (..) is some arbitrary function given by a library
ajax( "http://some.url.1", foo );
ajax( "http://some.url.2", bar );

【问题讨论】:

  • 如果 ajax 是一个使用回调的异步函数,而 foobar 是这些回调,那么它们将以任意顺序执行。如果您希望它们按顺序运行,您必须将第二个 ajax 调用移动到 foo (老派)或使用 .then() 或 await 代替(使用承诺版本的 ajax)
  • 你是说foo然后吧
  • 就像我说的:如果你先运行 foo,你可以轻松实现。所以是的。

标签: javascript jquery ajax api


【解决方案1】:

foo 和 bar 将同时执行

JavaScript 通常在单个事件循环上运行。除非您将处理外包给 Worker,否则您将永远同时运行两个函数。

2- foo 然后 bar 或 3- bar 然后 foo,我认为是 1

您没有向我们展示ajax 函数,但是假设它会进行 HTTP 回调,然后将回调函数排队等待 完成 HTTP 调用响应已到达:

顺序取决于服务器对两个不同 HTTP 请求的响应速度以及浏览器接收响应所需的时间。

例如,http://some.url.1 可能 导致服务器在响应之前花费 30 秒进行真正完整的数据库查询,而 http://some.url.2 可能会做一些简单的事情,在 3 毫秒后得到响应:其中案例bar 将在foo 之前添加到队列中,因此首先运行。

【讨论】:

    【解决方案2】:

    我们无法预测函数 foo 和 bar 的顺序。这些函数依赖于对某个api的ajax请求,所以无论哪个ajax请求先完成,都会调用相应的函数。

    注意:如果你需要同时同步两个函数,那么你可以使用promise方法。

    【讨论】:

      【解决方案3】:

      您在第一次编辑时从问题中删除了正确答案。它是:“2- 我们不知道”

      如果不知道ajax 的实现(或文档),就无法知道顺序。顺序甚至可以在不同的运行之间改变。

      这是一个例子:

      function ajax(url, fn) {
          setTimeout(fn, Math.random() * 1000);
      }
      
      var res = {};
      
      function foo(results) {
          res.foo = results;
          console.log('foo');
      }
      
      function bar(results) {
          res.bar = results;
          console.log('bar');
      }
      
      // ajax (..) is some arbitrary function given by a library
      ajax( "http://some.url.1", foo );
      ajax( "http://some.url.2", bar );

      您可以多次运行它并更改顺序。有时是

      foo
      bar
      

      有时是

      bar
      foo
      

      但是这些函数永远不会被同时调用。

      【讨论】:

      • 我没有使用promise,我只是想学习1- foo 和bar 将同时执行,或者2- foo 然后bar 或3- bar 然后foo,
      • @xh9tlf8d82 如果没有有关ajax 的更多信息,您将无法了解。正确答案是您在编辑中删除的选项:“2- 我们不知道”
      猜你喜欢
      • 2022-01-18
      • 2017-06-23
      • 1970-01-01
      • 2020-10-03
      • 2017-03-04
      • 2018-02-04
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      相关资源
      最近更新 更多