我在寫一個小應用程序,它與數據庫通信,而不是使用回調模式,我使用Promise來簡化我的代碼。經過大量的編碼,我現在可以在我的代碼中非常頻繁地看到一些模式,我需要知道如何重構它,以便類似的邏輯在一個地方。javascript中的重構模式
var queryString = "select * from users u inner join "+
"(select user_id, count(id) cnt from applications "+
"where id in (select id from applications where "+
"created_at > current_date - interval '1 week') "+
"group by user_id) a on u.id = a.user_id order by a.cnt desc";
var self = this;
return new Promise(function _promise(resolve, reject) {
req.client.query(queryString, [], function result(error, result) {
req.done(error);
if (error) {
console.log('error ' + error.message);
return reject(error);
}
var users = result.rows.map(function(row) {
return new User(row);
});
resolve(users);
});
});
上面的圖案有我的每一個方法if
後變化爲內容的唯一的事,是任何功能的方法,我可以用它來重構出來?
添加一個例子:
var queryString = 'select c.id, c.name, t.contact_user '+
'from companies c, teams t '+
'where t.user_id = $1::int and t.company_id = c.id '+
'limit $2::int';
var self = this;
return new Promise(function _promise(resolve, reject) {
req.client.query(queryString, [self.id, User._RESOURCE_LIMIT],
function result(error, result) {
req.done(error);
if (error) {
console.log('Error ' + error.message);
return reject(error);
}
self._companies = result.rows.map(function (data) {
return new Company(data);
});
resolve(self);
});
});
所以你總是'解析(用戶)'?這似乎不太可能 –
@JaromandaX我認爲這也是可變的,讓我糾正描述。 – CodeYogi
這一切都很好:p –