【发布时间】:2019-12-06 20:37:32
【问题描述】:
这段代码sn-p取自google developers:
// map some URLs to json-promises
const jsonPromises = urls.map(async url => {
const response = await fetch(url);
return response.json();
});
我知道最后 jsonPromises 将是一个 Promise 数组。但是,我不完全确定这是怎么发生的。
根据我的理解,当执行到const response = await fetch(url); 这一行时,它会将其从调用堆栈移动到Web Api,对return response.json(); 执行相同的操作,并从urls 移动到下一个url。这是正确的吗 ?当涉及到简单的 setTimeout 时,我了解事件循环是如何工作的,但是这个例子让我很困惑。
【问题讨论】:
-
是的,有点。 ...
-
@JonasWilms 你能否逐步解释一下会发生什么来消除我的疑虑?
-
嘿@Noob,因为 Array.map() 不是异步函数,它不会等待它运行一个元素的每个异步回调完成,然后再在下一个元素上运行它。至于reponse.json(),它只返回一个包装响应对象的解析体的promise。希望能把事情弄清楚一点?在此处获取更多信息:developers.google.com/web/updates/2015/03/introduction-to-fetch
-
@adamz4008 当然,我同意你的看法。我明白你在说什么,我的问题是它是如何与事件循环相关的。您的评论没有回答这个问题。
标签: javascript