Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环外的承诺_Javascript_Asynchronous_Promise - Fatal编程技术网

Javascript 循环外的承诺

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

我有这样一个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循环之后提取所需的数据。我只能在承诺范围内与
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=>您能提供一个
站点
阵列的示例吗?也许这有问题。