Javascript 一系列承诺
我正在做一件事,我必须从不同城市的API获取json数据并构建DOM 到目前为止,我已经能够做到这两个。唯一的问题是不同城市的API响应时间不同。因此,当我构建DOM时,它们的顺序与我调用函数的顺序不同。据我回忆,我需要用承诺来获得订单。 我现在的问题是: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
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
})