2017-09-23 15 views
0

Web APIから取得した値を返す必要があるgraphQLリゾルバの構文を非同期的に取得するために、私は争っています。サウンドのコンソールロギングはサウンドオブジェクトの私のリストをうまく表示しますが、クエリの結果としてリゾルバから返されることはありません。graphQLリゾルバはWeb APIが完了するのを待たずに

私は数多くのことを試してきましたが、広範囲にグーグルを行っていますが、リゾルバがWebクエリの結果を待つという魔法の呪文を見つけることはできません(API接続を確立するには2つ、実際に音のリストを取得するには):私は)(上記のコードの変異体の数十を試してみました

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 
    }, 
} 

これまでのところ、すべてが同じことになりました:返されたオブジェクトがnullです。

答えて

2

returnステートメントはPromiseチェーンの外側にあります。また、からsounds変数が返されません。 **私は最初の約束に復帰をしなかった以外**、どのsoundsあなたは、私が同じロジックをしようとした

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

を参照している変数のような混乱を避けるために.then()でパラメータの名前を調整してみてくださいチェーン内にある。 Doh !!本当にありがとう!! – capouch

関連する問題