Ich versuche, das Wetter mit Open Weather
Karte zu finden, und ich habe 2 Methoden, findWeatherByLocation
und findWeatherByCity
. Ich gehe davon aus, dass JavaScript
method overloading
und damit die 2 verschiedenen Namen nicht unterstützt. Beide Methoden akzeptieren eine callback
Funktion, die ausgelöst wird und das Gleiche tut.Wie vermeidet man Code-Duplizierung in JavaScript im angehängten Snippet?
function findWeatherForCity(senderID, city, countryCode, callback) {
//Lets configure and request
request({
url: constants.OPEN_WEATHER_MAP_BASE_URL, //URL to hit
qs: {
q: city + ',' + countryCode,
appid: constants.OPEN_WEATHER_MAP_API_KEY
}, //Query string data
method: 'GET', //Specify the method
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
let weather = getWeatherReport(JSON.parse(body));
callback(weather ? weather : null);
}
else {
console.error(response.error);
callback(null);
}
});
}
/*
lat, lon coordinates of the location of your interest
* http://openweathermap.org/current
*/
function findWeatherForLocation(senderID, location, callback) {
//Lets configure and request
request({
url: constants.OPEN_WEATHER_MAP_BASE_URL, //URL to hit
qs: {
lat: location.lat,
lon: location.lon,
appid: constants.OPEN_WEATHER_MAP_API_KEY
}, //Query string data
method: 'GET', //Specify the method
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
let report = getWeatherReport(JSON.parse(body));
callback(report ? report : null);
}
else {
console.error(response.error)
callback(null);
}
});
}
Wie Sie sehen können, hat die function(error, response, body)
das gleiche in beiden Orten. Wenn ich eine separate function(error, response, body)
mache, die sowohl für findWeatherByCity
und findWeatherByLocation
ist, wie trigger ich die callback
?
Vielen Dank für Ihre Hilfe im Voraus.
Ich wähle diese Frage zu schließen, wie Off-Topic, weil es –