0

私は、CouchDbで使用されるnanoライブラリを使用して、NodeJでbluebirdの約束を使用しようとしています。私は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);
        });

4

2 に答える 2

2

いくつか間違っていることがあります。

  1. Promisification と promsified バージョンを呼び出した後.then()、結果を取得するために使用します。
  2. .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);
    });

PS に関数の引数が渡されないはずnano.db.listAsync()ですか?

于 2016-05-01T05:21:19.740 に答える
0

あなたが渡す関数のパラメータnano.db.listAsync()が間違っていると思います。約束後にパラメータがないerrため、コードは次のようになります。

var nano = require('nano')(this.appInfo.dbServiceUrlPrefix);
    Promise.promisifyAll(nano);
    Promise.promisifyAll(nano.db);

    var p = nano.db.listAsync(function(body) {
        ...
于 2016-05-01T03:20:17.340 に答える