如何避免代码重复在JavaScript中附加的片段
How to avoid code duplication in JavaScript in the attached snippet?
我试图使用Open Weather
地图找到天气,我有2种方法,findWeatherByLocation
和findWeatherByCity
。我假设JavaScript
不支持method overloading
,因此有两个不同的名称。这两个方法都接受一个callback
函数,该函数将被触发并执行相同的操作。
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);
}
});
}
可以看到,function(error, response, body)
在两个地方做同样的事情。如果我为findWeatherByCity
和findWeatherByLocation
创建一个单独的function(error, response, body)
,我如何触发callback
?
提前感谢您的帮助
我已经使用承诺来重构回调并整理代码,但是你可以用回调来代替它们,尽管我不建议这样做(已经是2016年了)。
/* you are not using senderID anywhere but i left it cuz you had it.*/
function findWeather(senderID, queryType, options) {
return new Promise(function(resolve, reject) {
var queryObj = {
appid: constants.OPEN_WEATHER_MAP_API_KEY
};
if (queryType === 'city') {
queryObj.q = options.city + ',' + options.countryCode;
} else if (queryType === 'location') {
queryObj.lat= options.lat;
queryObj.lon= options.lon;
}
} else {
reject('no valid queryType');
}
request({
url: constants.OPEN_WEATHER_MAP_BASE_URL,
qs: queryObj,
method: 'GET'
}, function(err, response, body) {
if (!error && response.statusCode == 200) {
let report = getWeatherReport(JSON.parse(body));
resolve(report ? report : null);
} else {
reject(response.error);
}
});
});
}
/*USAGE*/
findWeather(1, 'city', {
city: 'Ramallah',
countryCode: '00970'
})
.then(function(data) {
console.log(data);
});
findWeather(1, 'location', {
lat: 1,
lon: 2
})
.then(function(data) {
console.log(data);
})
.catch(function(err) {
console.log(err);
});
这个问题不属于StackOverflow但是你可以这样做:
function responseHandler (error, response, body, callback) {
if (!error && response.statusCode == 200) {
let weather = getWeatherReport(JSON.parse(body));
callback(weather ? weather : null);
}
else {
console.error(response.error);
callback(null);
}
}
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) {
responseHandler(error, response, body, callback)
});
}
/*
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) {
responseHandler(error, response, body, callback)
});
}
相关文章:
- 使用Javascript/jQuery以编程方式将当前锚点/哈希/片段附加到任何表单操作url
- Javascript:如何从URL中抓取片段并将其写入一些PHP
- “Bada” - 这个JavaScript片段是怎么回事
- I'我试图在网页中添加一个javascript小片段,但它只是在页面上显示代码
- 是否可以将PHP的一个简单片段重新编码为javascript
- 使用javascript获取带有复选标记字符的字符串片段
- Javascript片段不适用于Chrome,但适用于Internet Explorer
- 如何更好地编写以下Javascript代码片段
- 如何使用JavaScript获取包含哈希片段的先前url
- 在reactjs中呈现本地图像/javascript片段
- 如何优化此JavaScript代码片段
- 被这个JavaScript代码片段弄糊涂了
- 以下 Chrome 扩展程序 JavaScript 代码片段究竟是如何工作的
- 使用 Javascript 显示哈希(或片段标识符)
- 应该很简单(但事实并非如此):PHP 中的 Javascript 片段
- 跳过爬虫的 JavaScript 代码片段
- 从片段 WebView JavaScript 更新活动图像视图
- 这个JavaScript片段是怎么回事
- 如何在 ADF 中的 JSF 片段加载(如正文加载)时调用 javascript 函数
- 代码片段- Javascript语法需要一些解释