我试图用 deferred 的 promisify 包装 node-memcached api,以简化我的嵌套回调。
当我尝试调用 promisified 函数时,我只得到“TypeError:无法读取未定义的属性‘命名空间’”。
Memcached = require('memcached');
var memcache = new Memcached('localhost:11211');
var add = deferred.promisify(memcache.add);
add('myKey', 'myVal', 0)(function(result) {
...
});
我似乎找不到其他人试图包装 node-memcached,或者遇到同样的错误。对可能出了什么问题有任何见解吗?或者,如果这是不完美的,甚至可能会朝着更好的方向推进?
谢谢!
编辑::
只是想回应一下,我现在通过挖掘找到了最好的解决方案。
似乎 deferred.promisify 使用自己的范围(this)调用传递的函数,而不是传入函数的上下文。
使用我自己的 promisfy 函数似乎可以解决问题(来自http://howtonode.org/promises的想法):
function promisify(fn, context) {
return function() {
var def = deferred();
var args = Array.prototype.slice.call(arguments);
args.push(function(err, val) {
if (err !== null) {
return def.reject(new Error(err));
}
return def.resolve(val);
});
fn.apply(context, args);
return def.promise;
};
}