2017-10-31 10 views
0

目的の情報を表示:getWeather(へ onClickイベントトリガ同期呼び出し)を呼び出し表示()同期呼び出し気象API、次いで

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コールバック関数がこの問題を引き起こしています。私は約束をどこに返すべきかわからない。

+0

'getWeather()'の実際のロジックを見る必要があります。私はあなたが正しく非同期パターンを使用していないと推測して、リクエストから約束の代わりにリクエストが完了する前にデータを返そうとしています –

+0

'weather_report'には' display'という関数が含まれています引数として) – baao

+0

@RoryMcCrossanここでコードを見ることができますhttp://jsfiddle.net/vyELp/123/ –

答えて

0

私は自分自身のために話すそれを補正

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'); 

    }); 

}; 

これ以上の行の

JsFiddleを自分自身を解決しました。 API全体を約束しました。それが私がそれを解決した方法です。

誰かがより良い方法を見つけたら、お答えください。

関連する問題