2017-09-23 1 views
0

Ich kämpfe, um die Syntax richtig für eine graphQL Resolver, die den Wert von einer Web-API erhalten, die asynchron abläuft, erhalten. Die Konsolenprotokollierung von Sounds zeigt meine Liste von Soundobjekten an, aber ich kann sie vom Resolver als Ergebnis der Abfrage nicht zurückgeben.graphQL Resolver wartet nicht auf Web-API zu vervollständigen

Ich habe eine Reihe von Dingen ausprobiert und viel gegoogelt, kann aber immer noch nicht die Zauberformel finden, um den Resolver auf die Ergebnisse der Webabfragen warten zu lassen (es braucht zwei, einen, um eine API-Verbindung herzustellen) um tatsächlich die Soundliste) zu holen: Bisher alles, was ich versucht habe (Dutzende von Varianten des Codes

var serviceProvider = require('provider-api) 

    Query: { 
    sounds:() => { 
     serviceProvider.connect('http://soundsource.foo', 'userName', 'pass') 
     .then (function (client) { 
      client.sounds.list() 
      .then (function (sounds) { 
      console.log('Got some sounds ' + sounds) 
      }) 
     .catch(function (err) { 
     console.log('Error in sounds query ' + err) 
     }) 
     }) 
     return sounds 
    }, 
} 

oben) wird in der gleichen Sache geführt: das zurückgegebene Objekt null ist.

Antwort

2

Die return-Anweisung befindet sich außerhalb der Promise-Kette. Außerdem wird die sounds Variable nicht von .then() zurückgegeben. Betrachten Sie den Namen des Parameters an .then() Einstellung Verwirrung zu vermeiden, da zu dem sounds Variable, die Sie verweisen

var serviceProvider = require('provider-api) 

    Query: { 
    sounds:() => { 
     return serviceProvider.connect('http://soundsource.foo', 'userName', 'pass') 
     .then (function (client) { 
      return client.sounds.list() 
      .then (function (_sounds) { 
      console.log('Got some sounds ' + _sounds) 
      return _sounds 
      }) 
      .catch(function (err) { 
      console.log('Error in sounds query ' + err); 
      return err 
      }) 
     }) 
     .catch(function(err) { 
     console.log(err) 
     }) 
    }, 
} 
+2

ich die gleiche Logik versucht hatte, ** außer ** I keine Rückkehr auf dem ersten Versprechen zu tun haben in der Kette. Doh !! Vielen Dank!! – capouch

Verwandte Themen