蓝鸟在NodeJS中承诺,而不是到那时

时间:2016-05-01 02:50:01

标签: node.js typescript couchdb bluebird couchdb-nano

我试图在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);
        });

2 个答案:

答案 0 :(得分:2)

有几件事是错的。

  1. 在宣传并调用promsified版本后,您可以使用.then()来获得结果。
  2. .then()解析处理程序不再具有err变量。如果出现错误,则调用.then()拒绝处理程序。
  3. 所以,我认为你想要这样的东西:

       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) {
        ...