我想在我的项目中使用arangojs 3.4.2。从3.0开始,驱动程序没有使用承诺。 在尝试了几个libs来宣传驱动程序之后我没有成功(bluebird,promisify-node ...):每次驱动程序返回一个实例未实现的新实例时,我必须再次宣传新实例以与promises一起使用:
var Promise=require('bluebird');
var arango=require('arangojs');
db=Promise.promisifyAll(new arango("http://localhost:8529"));
/*db is promisified properly*/
testdb=db.databaseAsync('test').then(function(testInstance){
/*
the testInstance returned by the driver is not promisified
to use it with promises i've to promisify again
*/
})
有没有办法实现这个目标?
答案 0 :(得分:1)
这是正确的。
如果你想宣传驱动程序中所有对象的所有方法,你需要宣传原型'方法直接:
var Database = require('arangojs/lib/Database');
Promise.promisifyAll(Database.prototype);
var db = new Database('http://localhost:8529');
db.databasesAsync().then(function (databases) {
databases.forEach(function (database) {
assertTrue(typeof database.databaseAsync === 'function');
});
});
答案 1 :(得分:0)
从版本3.5开始,如果在调用异步函数时定义了全局Promise构造函数,该函数也将返回一个promise。