我想构建一个功能,使用Open Weather Map API获取四个城市的预测天气描述。城市被放置在名为“城市”的变量的列表中。我想我必须创建一个for循环来通过API运行所有城市?
结果应该是一个列表,其中所有城市显示接下来8天的8个天气描述。
这是我到目前为止所拥有的。有什么建议吗?
function getDescriptions(){
var cities = [Cannes, London, Amsterdam, Berlin];
$.ajax({
url: 'http://api.openweathermap.org/data/2.5/forecast/daily?q=' + city + "&units=metric" + "&cnt=8" + "&APPID=***",
type: "GET",
dataType: "jsonp",
success: function(data){
var descriptions = data.list[i].weather[0].description;
}
});
}
答案 0 :(得分:3)
让你失望的是ajax调用是异步的,所以你不能只是"返回"结果。 (见How do I return the response from an asynchronous call?)
所以你的getDescriptions
需要返回一个在所有ajax调用完成时解析的promise。
function getDescriptions(cities){
var requests = cities.map(function(city){
return $.ajax({
url: 'http://api.openweathermap.org/data/2.5/forecast/daily?q=' + city + "&units=metric" + "&cnt=8" + "&APPID=***",
type: "GET",
dataType: "jsonp"
}).then(function(data){
return data.weather[0].description
});
});
return Promise.all(requests);
}
var cities = ["Cannes", "London", "Amsterdam", "Berlin"];
getDescriptions(cities).then(function(results){
console.log(results);
});

答案 1 :(得分:0)
我认为你最好的方法是将所有城市推向api然后获得所有细节作为回报,但我猜这不起作用。
一个物体怎么样?
template <class P> pair<iterator,bool> insert (P&& val);