2016-05-01 7 views
0

Ich versuche, Bluebird Versprechen in NodeJs mit Nano eine Bibliothek mit CouchDb verwendet zu verwenden. Ich benutze das promisfy und wenn ich schaue, bekomme ich die neuen asynchronen Methoden. Im folgenden Beispiel funktioniert der Aufruf nano.db.listAsync gut, aber ich komme nie zum .then oder dem .catch.Bluebird verspricht in NodeJS, nicht zu

Was ist hier falsch?

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

So ist Ihre Syntax nicht Javascript. Welche Sprache ist es? Können Sie bitte Ihre Frage passend für diese Sprache markieren? – jfriend00

+0

Sie könnten interessiert sein an https://www.npmjs.com/package/nano-blue – maxlath

Antwort

2

Es gibt ein paar Dinge falsch.

  1. Nach der Ankündigung und Aufruf der promified-Version verwenden Sie , um das Ergebnis zu erhalten.
  2. Der .then() Resolve-Handler hat keine err Variable mehr. Wenn ein Fehler auftritt, wird der Ablehnungshandler .then() aufgerufen.

Also, ich glaube, Sie so etwas wie dies wollen:

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. Sind Sie sicher, dass keine Funktionsargumente an nano.db.listAsync() übergeben werden sollen?

0

Ich denke, die Funktionsparameter Sie nano.db.listAsync() sind falsch passieren. Es wäre nicht err Parameter nach promissification haben, so dass Ihr Code wie folgt aussehen sollte:

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

    var p = nano.db.listAsync(function(body) { 
     ... 
+0

Ich habe das versucht. es kommt auf Null. Wenn ich mir den Prototyp anschaue, nimmt die Liste Async arg1, arg2, arg3. als ich diese ausprobierte, hatte das 2. Argument den Körper, das dritte sah aus wie die Anfrage. Der erste vermute ich, der Irrtum zu sein. – jeff

Verwandte Themen