Bluebird 在 NodeJS 中的承诺,没有到那时
Bluebird promises in NodeJS, not getting to then
我正在尝试在 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);
});
我认为您传递给 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) {
...
有些地方不对。
- promisification调用promsified版本后,使用
.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()
吗?
我正在尝试在 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);
});
我认为您传递给 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) {
...
有些地方不对。
- promisification调用promsified版本后,使用
.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()
吗?