函数 foo 和 bar 的执行顺序是啥?

Posted

技术标签:

【中文标题】函数 foo 和 bar 的执行顺序是啥?【英文标题】: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,你可以轻松实现。所以是的。 【参考方案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- 我们不知道”

以上是关于函数 foo 和 bar 的执行顺序是啥?的主要内容,如果未能解决你的问题,请参考以下文章

线程和非线程函数调用的执行顺序是啥?

请问if函数啥意思,执行的顺序是啥 ,如果b3不等于空格往下怎么说?

关于闭包的理解

Javascript中代码的执行顺序是啥?

PostgreSQL 手动更改查询执行计划以强制使用排序和顺序访问而不是全扫描

java中创建对象了,显示初始化值和构造函数初始化对象的区别?先后执行顺序是啥?