根据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 是单线程的。为什么foo
和bar
是两个并发
“进程
最佳答案
我认为它们是“并发的”(在我看来这是一个困惑),因为 ajax() 函数使它们异步,它们的行为就像 promise 中的回调函数,所以这取决于它们到达参数中的地址的速度并返回一个值。
编辑:一张小图,以防万一它能有所帮助:-) 这 2 个指令是同时触发的,但由于它们是异步的,因此 2 个 ajax 调用下面的指令会在不等待返回值的情况下执行
这里,第一个请求花了 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/