初学 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);
});
});
};
但不晓得这类写法 是不是充足智慧,迎接指教。