Javascript 将custom then()-方法添加到promisifyAll生成的每个函数中

Javascript 将custom then()-方法添加到promisifyAll生成的每个函数中,javascript,node.js,promise,bluebird,aerospike,Javascript,Node.js,Promise,Bluebird,Aerospike,我最近开始和他们一起玩。我认为数据库本身是惊人的,但客户端库有一个小问题: // Read the same record from database client.get(key, function(err, rec, meta) { // Check for errors if ( err.code == status.AEROSPIKE_OK ) { // The record was successfully read. console.log(rec, m

我最近开始和他们一起玩。我认为数据库本身是惊人的,但客户端库有一个小问题:

// Read the same record from database 
client.get(key, function(err, rec, meta) {
  // Check for errors 
  if ( err.code == status.AEROSPIKE_OK ) {
    // The record was successfully read. 
    console.log(rec, meta);
  } else {
    // An error occurred 
    console.error('error:', err);
  }
});
当一切正常时,对象总是返回,而不是返回
null
undefined
作为错误。如果
err.code==0
一切顺利。这意味着库不能用bluebird的
promisifyAll
包装

getPromise().then((err, rec, meta) => {
  if(err.code === 0) {
    return {rec: rec, meta: meta};
  } else {
    return Promise.reject();
  }
}
我试图通过在
promisifyAll
生成的每个函数之后添加另一个
然后
-方法来解决这个问题

getPromise().then((err, rec, meta) => {
  if(err.code === 0) {
    return {rec: rec, meta: meta};
  } else {
    return Promise.reject();
  }
}

如果不显式地手动执行每个函数,我就无法让它工作。有没有其他方法可以做到这一点?

听起来蓝鸟的情况就是这样:


您可以更改驱动程序的源代码,但这是不切实际的,所以您可以将其封装在一个返回null的新函数中,然后在Github上发布一个关于此的问题。@adeneo您是对的。有一个类似的问题,但它似乎不会被改变,因为这是一个突破性的改变,而且很多人已经在使用它。@Thole:嗯,你总是可以放弃这个项目:-)违背nodejs惯例是很难证明的,它只会导致问题(比如这样)@Bergi我同意:)我会在Aerospike的大人物那里安装更多的窃听器,在客户端初始化以符合约定时,可能会添加一个标志。@Thole:他们可以为突破性的更改引入一个2.0版本。比国旗更有意义。哇,太棒了!谢谢你,伯吉!如果(!err | | | | err.code==aerospeck.status.aerospeck_OK),您可能希望通过测试
使自己免疫于未来某个固定版本的Aerospike。否则,有一天你/某人可能会尝试一个更新,并且很难跟踪导致整个ApparantAerospike失败的原因。@Roamer-1888:我希望在更新的发行说明中清楚地描述这样一个突破性的变化;因此,您可以故意完全删除此promisifier(可能使用
multiArgs:true
)。但我明白你的意思,编辑。