目的: 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();
答案 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调用作为一个承诺。这就是我解决它的方式。
如果有人找到更好的方法,请回复!