javascript - 为什么 foo 和 bar 都是平行的?

标签 javascript

根据You-Dont-Know-JS 非交互

var res = {};

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

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

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

foo()bar() 是两个并发“进程”,并且它们的触发顺序是不确定的。但是我们构建了该程序,因此它们的触发顺序并不重要,因为它们独立运行,因此不需要交互。

我无法理解并发的含义。

我知道 JavaScript 是单线程的。为什么foobar是两个并发“进程

最佳答案

我认为它们是“并发的”(在我看来这是一个困惑),因为 ajax() 函数使它们异步,它们的行为就像 promise 中的回调函数,所以这取决于它们到达参数中的地址的速度并返回一个值。

编辑:一张小图,以防万一它能有所帮助:-) 这 2 个指令是同时触发的,但由于它们是异步的,因此 2 个 ajax 调用下面的指令会在不等待返回值的情况下执行

enter image description here

这里,第一个请求花了 300 毫秒返回“status 200”的响应对象(严重的 foo = 200),而在第二个请求中,返回 404 并将其分配给 bar 变量需要两倍的时间。

如果你想在处理第二个 ajax 调用之前等待第一个 ajax 调用返回一些内容,你需要检查 js 中的 Promises,你可以在其中执行诸如 ajax(1, foo).then(ajax(2, bar)) (再次严重)

关于javascript - 为什么 foo 和 bar 都是平行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43513203/

相关文章:

php - 从网站代码中删除未使用的 CSS

javascript - 使用 JQuery 动态更新 href 文本值

javascript - 使用 AnalyserNode 和 ChannelSplitter 获取 L/R 数据

javascript - 我如何在图像不移动的情况下在图像下滑动切换()文本?

javascript - AWS S3 - 我们计算的请求签名与您提供的签名不匹配。检查您的 key 和签名方法

javascript - 如何将类添加到相邻元素的输入元素?

javascript - 添加/删除样式时使用 dojoAttachpoint 的问题

javascript - jQuery Offset().left 不能正常工作

javascript - 无法从 JavaScript 中的 JSON 数组获取值

javascript - 如何在悬停时更改元素的颜色并在使用 jquery mouseout 时将其删除?