Javascript 一系列承诺

Javascript 一系列承诺,javascript,jquery,asynchronous,promise,closures,Javascript,Jquery,Asynchronous,Promise,Closures,我正在做一件事,我必须从不同城市的API获取json数据并构建DOM 到目前为止,我已经能够做到这两个。唯一的问题是不同城市的API响应时间不同。因此,当我构建DOM时,它们的顺序与我调用函数的顺序不同。据我回忆,我需要用承诺来获得订单。 我现在的问题是: 我如何使用承诺数组(因为我的输入会有所不同) 还有,我如何执行一系列承诺 我目前的工作代码: var base_path = "https://www.example.com/"; var cities = [ "San_Francis

我正在做一件事,我必须从不同城市的API获取json数据并构建DOM

到目前为止,我已经能够做到这两个。唯一的问题是不同城市的API响应时间不同。因此,当我构建DOM时,它们的顺序与我调用函数的顺序不同。据我回忆,我需要用承诺来获得订单。 我现在的问题是:

  • 我如何使用承诺数组(因为我的输入会有所不同)
  • 还有,我如何执行一系列承诺 我目前的工作代码:

    var base_path = "https://www.example.com/";
    var cities = [
       "San_Francisco",
        "Miami",
        "New_Orleans",
        "Chicago",
        "New_York_City"
    ];
    
    
    function getData(city){
        var path =  base_path+city+".json";
    
        $.getJSON(path,function(data) {
         // build DOM
        });
    }
    
    for(var i=0;i<cities.length;i++) {
        getData(cities[i]);  
    }
    
    var基本路径=”https://www.example.com/";
    var城市=[
    “旧金山”,
    “迈阿密”,
    “新奥尔良”,
    “芝加哥”,
    “纽约市”
    ];
    函数getData(城市){
    var path=base_path+city+“.json”;
    $.getJSON(路径、函数(数据){
    //构建DOM
    });
    }
    
    对于(var i=0;i来说,使用
    Promise.all()实现这一点非常简单。


    保留
    数据
    数组顺序的原因是因为
    Promise.all()
    保留了原始Promise数组的顺序。请求是并行执行的。我使用了here而不是jQuery。

    使用
    Promise.all()
    实现这一点非常简单:

    保留
    数据
    数组顺序的原因是
    Promise.all()
    保留了原始promises数组的顺序。请求是并行执行的。我使用了here而不是jQuery。

    请注意-“如果任何传入的承诺被拒绝,则PROMICE.all将以被拒绝的承诺的值异步拒绝,无论其他承诺是否已解决。”。请注意—如果任何传入的承诺被拒绝,则无论其他承诺是否已解决,Promise.all都将使用被拒绝的承诺的值异步拒绝。“。
    const base_path = "https://www.example.com/"
    let cities = [
      "San_Francisco",
      "Miami",
      "New_Orleans",
      "Chicago",
      "New_York_City"
    ]
    
    Promise.all(cities.map((city) => {
      return fetch(`${base_path}${city}.json`).then(res => res.json())
    })).then((data) => {
      // Data is an array of all responses in the same order as the cities array
    }).catch((err) => {
      // A request failed, handle the error
    })