ネストされたコールバックを簡素化するために、node-memcached API を deferred の promisify でラップしようとしています。
約束された関数を呼び出そうとすると、「TypeError:未定義のプロパティ 'namespace'を読み取れません」というメッセージが表示されます。
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;
};
}