Javascript 循环外的承诺
我有这样一个for循环:Javascript 循环外的承诺,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,我有这样一个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
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循环之后提取所需的数据。我只能在承诺范围内与currentMaximum
交互,但该数据仅与其中一个站点相关(直到for循环之后,它才完成所有站点的循环)
在包含
getJSON
承诺的for循环之后,如何访问currentMaximum
值?您需要使用异步循环,然后在所有异步getJSON请求完成后执行回调。您可以用它来帮助解决这个问题。
//您的代码:
/*
无功电流最大
用于(站点中的var站点){
//每个网站都是一个网站(www.mysite1.com、www.mysite2.com等)
$.getJSON(站点).then(函数(数据){
如果(数据>当前最大值){
当前最大值=数据
}
});
}
*/
//更新:
const sitePromisesar=sites.map((site)=>$.getJSON(site));
$.when(SitePromisesar)
.然后((valArr,index)=>{
//这里的“valArr”是一个包含响应的数组
常数最大=值减少((当前,下一个)=>next>current?下一个:current,0);
//这将是最大的价值。
控制台日志(最大);
//这将是包含最大值的站点。
log(sitePromisesar[index]);
});代码>
基本上这是你想象不到的。由于getJSON
调用是异步的,因此无法在循环之后同步访问currentMaximum
。您必须通过.then
函数访问该数据,就像基于异步操作的任何其他结果一样。@CRice那么我该如何构造它呢?您需要将所有getJSON
承诺放入一个数组中,然后使用Promise.all
等待所有承诺的完成,然后计算最大值,并在中使用它做你需要的事情。然后承诺中的。
@CRice我正在尝试这个实现,但是在想如何将我的站点数组转录到承诺.all()
中时遇到了困难。如果你有时间,你能给我举个例子吗?这很好,我会接受的!有没有一种方法可以让我知道最大的价值来自哪个网站?是的。我将更新我的答案以向您提供这些信息。@AlwaysQuestioning=>我已更新我的答案以向您提供这些信息。测试后,这不起作用。当我为
执行循环通过valArray
时,变量仍然未定义。我怎样才能使承诺在那时得到完全解决?@AlwaysQuestioning=>您能提供一个站点
阵列的示例吗?也许这有问题。