我试图在NodeJs中使用bluebird promises,使用nano与couchDb一起使用的库。我使用promisfy,当我看到新的异步方法。在下面的示例中,nano.db.listAsync
调用运行正常,但我从未进入.then或.catch。
这里有什么问题?
var nano = require('nano')(this.appInfo.dbServiceUrlPrefix);
Promise.promisifyAll(nano);
Promise.promisifyAll(nano.db);
var p = nano.db.listAsync(function(err,body) {
// get all the DBs on dbServiceUrlPrefix
var dbNames:string[] = <string[]> body ;
console.log("allDbs",dbNames) ;
return dbNames ;
}).then(function (e:any) {
console.log('Success',e);
}).catch(function(e:any){
console.log('Error',e);
});
答案 0 :(得分:2)
有几件事是错的。
.then()
来获得结果。.then()
解析处理程序不再具有err
变量。如果出现错误,则调用.then()
拒绝处理程序。所以,我认为你想要这样的东西:
var nano = require('nano')(this.appInfo.dbServiceUrlPrefix);
Promise.promisifyAll(nano);
Promise.promisifyAll(nano.db);
nano.db.listAsync().then(function(body) {
// get all the DBs on dbServiceUrlPrefix
var dbNames:string[] = <string[]> body ;
console.log("allDbs",dbNames) ;
return dbNames;
}).then(function (e:any) {
console.log('Success',e);
}).catch(function(e:any){
console.log('Error',e);
});
P.S。您确定不应该将任何函数参数传递给nano.db.listAsync()
吗?
答案 1 :(得分:0)
我认为您传递给nano.db.listAsync()
的函数参数不正确。在promissification之后它不会有err
参数,所以你的代码应该是这样的:
var nano = require('nano')(this.appInfo.dbServiceUrlPrefix);
Promise.promisifyAll(nano);
Promise.promisifyAll(nano.db);
var p = nano.db.listAsync(function(body) {
...