【发布时间】:2018-03-08 02:35:13
【问题描述】:
我有一个这样的 for 循环:
var currentLargest
for (var site in sites) {
// Each site is a website (www.mysite1.com, www.mysite2.com, etc.)
$.getJSON(site).then(function(data) {
if (data > currentLargest) {
currentLargest = data
}
});
}
// Here is where I want to use "currentLargest"
它检查多个不同的网站以获得最大的价值。但是,我无法在 for 循环之后提取我需要的数据。我只能在 Promise 中与 currentLargest 进行交互,但该数据仅与其中一个站点相关(直到 for 循环之后它才完成所有这些站点的循环)。
如何在包含 getJSON 承诺的 for 循环之后访问 currentLargest 值?
【问题讨论】:
-
基本上这在你想象的方式中是不可能的。由于
getJSON调用是异步的,因此无法在循环后同步访问currentLargest。您必须通过.then函数访问该数据,就像任何其他基于异步操作的结果一样。 -
@CRice 那么我该如何构建这个呢?
-
您需要将所有
getJSON承诺放入一个数组中,然后使用Promise.all等待所有承诺的完成,然后计算最大的并用它做你需要的那个Promise.all的.then。 -
@CRice 我正在尝试这个实现,但无法弄清楚如何将我的
sites数组转录为Promise.all()。如果你有时间,你能给我举个例子吗?
标签: javascript asynchronous promise