初学 Node.js
,用 Express
开发 Web
项目。
而且还是个不小的项目,说起来挺冒险的。
一开始比较简单,并没有使用 Promise
也能顺利进行,
随着开发的深入,到了不用 Promise
不行的地步了。
于是产生了一个问题,一些之前写的方法并不支持 Promise
,
如果直接改成 Promise
,那之前调用过的地方也都得改,工作量有点大。
如果加一个 Promise
版,那就有点啰嗦有点丑陋,如下所示:
// 也就是同一个功能,写两个版本
function getInfo(uid, callback) { ... };
function getInfoPromise(uid) { ... };
听说 Bluebird
有个 promisify
方法,可以将方法 Promise
化,
但是又感觉为了这一个方法,多加载一个库,有点浪费内存,
毕竟 Node.js
现在原生的支持 Promise
了,
能不能“人工手动”将函数改成,既支持 Callback
回调,又支持 Promise
呢?
于是有了以下修改:
// 原先只支持 callback 回调版:
var getInfo = function(uid, callback) {
var sql = "select * from v_user where uid=? limit 1";
Mysql.query(sql, [uid], function(err, row) {
if(err) return callback(err);
if(row.length===0) return callback();
var info = row[0];
callback(null, info);
});
};
// 修改后 既支持 callback 回调,又支持 Promise
var getInfo = function(uid, callback) {
return new Promise(function(resolve, reject) {
if (callback) {
resolve = function (ret) {
callback(null, ret);
};
reject = callback;
}
var sql = "select * from v_user where uid=? limit 1";
Mysql.query(sql, [uid], function(err, row) {
if(err) return reject(err);
if(row.length===0) return resolve();
var info = row[0];
resolve(info);
});
});
};
但不知道这种写法 是否足够聪明,欢迎指教。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。