2017-02-09 12 views
0

最初にコンテキストを設定します。私はサーバが起動時に(インスタンスのデータベースの一種)インスタンス化されるオブジェクトのクエリ1のために使用しているgraphqlサーバを実行しています。ここで会社のオブジェクトは、スキーマがロードされるたびに作成されます。または、サーバーが開始され、解決するためにQueryTypeオブジェクトで使用しています。ここでgraphQLリレー呼び出しのクエリに問題があります。[.thenは関数ではありません]

は、私がgraphiQLエディタ

query{ 
    company{ 
    customFieldDefinitions { 
     edges { 
     node { 
      id 
     } 
     } 
    } 
    } 
} 

に以下のようにクエリを実行しようとすると、今、私は以下のようにエラーが発生しますgraphQLスキーマ

const { 
    GraphQLSchema, 
    GraphQLObjectType, 
    GraphQLString, 
    GraphQLInt, 
    GraphQLList 
    } = require('graphql'); 
const { 
    connectionDefinitions, 
    connectionArgs, 
    connectionFromArray, 
    connectionFromPromisedArray 
    } = require('graphql-relay'); 




//**************************** In-Memory Data ********************************// 
var company = { 
    id:'123456', 
    customFieldDefinitions:[ 
     { 
      name: 'cfm1', 
      id: '123' 
     }, 
     { 
      name: 'cfm2', 
      id: '1234' 
     } 
    ] 
}; 
//**************************** In-Memory Code Ends *********************************// 


const CustomFieldDefinitionType = new GraphQLObjectType({ 
    name: 'Common_CustomFieldDefinitionsConnection', 
    fields: { 
     id: { 
      type: GraphQLString, 
      resolve: (cfd) => cfd.id 
     }, 
     name: { 
      type: GraphQLString, 
      resolve: (cfd) => cfd.name 
     } 
    } 
}); 

const { connectionType: CustomFieldDefinitionConnection } = 
    connectionDefinitions({ 
     name: 'Common_CustomFieldDefinition', 
     nodeType: CustomFieldDefinitionType 
    }); 


const CompanyType = new GraphQLObjectType({ 
    name: 'Company', 
    fields: { 
     id: { 
      type: GraphQLString, 
      resolve: (obj) => obj.id 
     }, 
     customFieldDefinitions: { 
      type: CustomFieldDefinitionConnection, 
      description: 'A list of Custom Fields', 
      args: connectionArgs, 
      resolve: (obj, args) => connectionFromPromisedArray(obj.customFieldDefinitions, args) 
     } 
    } 
}); 

const QueryType = new GraphQLObjectType({ 
    name: 'Query', 
    fields: { 
     company: { 
      args: { 
       id: { type: GraphQLString }, 
      }, 
      type: CompanyType, 
      resolve: (_, args) => company 
     } 
    } 
}); 

const mySchema = new GraphQLSchema({ 
    query: QueryType 
}); 

module.exports = mySchema; 

です。

{ 
    "data": { 
    "company": { 
     "customFieldDefinitions": null 
    } 
    }, 
    "errors": [ 
    { 
     "message": "dataPromise.then is not a function", 
     "locations": [ 
     { 
      "line": 3, 
      "column": 5 
     } 
     ], 
     "path": [ 
     "company", 
     "customFieldDefinitions" 
     ] 
    } 
    ] 
} 

誰かが問題の特定に役立つことがありますか?それは、エラーのように見えます

答えて

2

は、この行を次のとおりです。

resolve: (obj, args) => connectionFromPromisedArray(obj.customFieldDefinitions, args)

問題がgraphql-relayから輸入connectionFromPromisedArray関数は配列を返し、obj.customFieldDefinitionsは通常の配列である約束を期待していることです。それを追跡するだけで、objはそのリゾルバの親要素です。この場合、タイプのcompanyリゾルバから返されるものです。

はそれを修正、どちらかconnectionFromArrayconnectionFromPromisedArrayを変更したり、これにあなたの会社のオブジェクトを変更するには:

var company = { 
    id:'123456', 
    customFieldDefinitions: Promise.resolve([ 
    { 
     name: 'cfm1', 
     id: '123' 
    }, 
    { 
     name: 'cfm2', 
     id: '1234' 
    } 
    ]) 
}; 
+0

おかげトン。それは問題だった – Gautam

+0

助けて嬉しいです!運が良かった。 – mparis

関連する問題