Web API:S Fetch() 是并行的还是异步的?
Is Web API:S Fetch() parallell or async?
我找不到这个问题的答案。
当我们调用fetch()时,浏览器是开启了一个新的线程,还是只是放到了微队列中?
答案有点像“两者”:
网络请求本身与在您的 JavaScript 线程上发生的任何其他事情并行处理,而不是在 JavaScript 线程上。 (在所有主流浏览器中。)
当网络请求完成时,JavaScript 线程将在下一次检查相关队列时排队等待承诺反应(履行或拒绝)。 (我 认为 发生的事情是浏览器将一个 settlement promise 的任务排入队列,这反过来又将任何相关的 promise 反应排入微任务队列中。不过细节并不重要;从根本上说,一旦网络请求完成,task/microtask 就会在某个地方排队等待任何需要发生的承诺反应,并像其他 tasks/microtasks 一样被 JavaScript 线程拾取。)
我找不到这个问题的答案。 当我们调用fetch()时,浏览器是开启了一个新的线程,还是只是放到了微队列中?
答案有点像“两者”:
网络请求本身与在您的 JavaScript 线程上发生的任何其他事情并行处理,而不是在 JavaScript 线程上。 (在所有主流浏览器中。)
当网络请求完成时,JavaScript 线程将在下一次检查相关队列时排队等待承诺反应(履行或拒绝)。 (我 认为 发生的事情是浏览器将一个 settlement promise 的任务排入队列,这反过来又将任何相关的 promise 反应排入微任务队列中。不过细节并不重要;从根本上说,一旦网络请求完成,task/microtask 就会在某个地方排队等待任何需要发生的承诺反应,并像其他 tasks/microtasks 一样被 JavaScript 线程拾取。)