【发布时间】:2018-01-19 20:44:20
【问题描述】:
This article 说下面的代码无法工作,因为forEach 不支持异步。
story.chapterUrls.forEach(function(chapterUrl) {
getJSON(chapterUrl).then(function(chapter) {
addHtmlToPage(chapter.html);
});
})
story.chapterUrls 是一个包含 url 的数组,getJSON 从 url 中获取数据。然而,尽管每个 getJSON() 阻止下一个,但上面的代码似乎正在工作。这段代码有什么问题?
【问题讨论】:
-
你是什么意思它阻止了下一个?根据你刚才引用的文章,他们没有。问题是因为它们不会互相阻塞,
addHtmlToPage()可以按任何顺序调用。 -
@PatrickRoberts 在
forEach中,执行顺序类似于getJSON(url[0])->getJSON(url[1])->getJSON(url[2])...并且每个都是非阻塞的,因为getJSON()返回承诺。是这样吗?? -
正确,非阻塞。但是,处理这些请求的服务器端逻辑当然有可能被阻塞,从而迫使它们处于 FIFO 顺序。这也有可能只是巧合,如果你运行足够多次,它们最终会出现故障。
-
谢谢。我已经使用返回非常小的数据的 api 测试了代码,所以我认为每个
getJSON都会阻止下一个。 -
@KevinB 如果您想“投反对票”,标记为重复,或者以其他方式解决问题,解释为stackoverflow.com/questions/48349699/…
标签: javascript foreach promise