对于loop api获取天气描述

时间:2018-04-20 06:43:57

标签: javascript api for-loop openweathermap

我想构建一个功能,使用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;            
        
        }                       
    });        
}

2 个答案:

答案 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);