同步调用天气api然后显示信息

时间:2017-10-31 13:45:17

标签: javascript jquery

  

目的:   onClick事件触发同步调用getWeather()然后调用display()

var position={} // object containing latitude and longitude

var getWeather = function(pos) {
$.getJSON('https://api.openweathermap.org/data/2.5/weather', {
    lat: pos.lat,
    lon: pos.lng,
    appid: "*****appid***"
}, showWeather, 'jsonp');

return new Promise(function (resolve, reject) {
    resolve(weather_data)
    });
};

var showWeather = function(data) {
    return weather_data;

};
function display(weather_info){
  console.log(weather_info);
}

以上两个我希望使用 承诺 并按相应顺序同步运行的功能;

问题:

当我在点击功能中使用它时,它不会返回weather_data。

$("html").click(function() {      
    getWeather(position)
        .display(getWeather);

});

我做错了什么?

  

来自$ .getJSON的showWeather回调函数正在创建这个麻烦。我不知道在哪里返回promise();

1 个答案:

答案 0 :(得分:0)

我自己解决了

JsFiddle更正

var getWeather = function(pos) {        

    return new Promise(function (resolve, reject) {
        var data_w={};
        $.getJSON('https://api.openweathermap.org/data/2.5/weather', {
            lat: pos.lat,
            lon: pos.lng,
            appid: "*****appid****"
        }, function(data) { resolve(data)}, 'jsonp');

    });

};

以上这些内容不言自明。我已经将整个API调用作为一个承诺。这就是我解决它的方式。

如果有人找到更好的方法,请回复!