1

サンク関数の使用法に行き詰まっており、それがどのように機能するかをよりよく理解する必要があります。

動作しないコード:

const fields = {
    id: {
        type: new GraphQLNonNull(GraphQLID),
        resolve: (obj) => dbIdToNodeId(obj._id, "History")
    },
    timestamp: {
        type: GraphQLLong
    },
    objectId: {
        type: GraphQLString
    },
    user: {
        type: require('../User/connections').default,
        args: connectionArgs,
        resolve: (source, args) => {
            return UserModel.findOne({ id: source.id }).exec();
        }
    },
    action: {
        type: new GraphQLNonNull(GraphQLString)
    }
};

export const HistoryType = new GraphQLObjectType({
    name: 'History',
    description: 'History',
    interfaces: () => [NodeInterface],
    isTypeOf: (value) => value instanceof HistoryModel,
    fields: () => (fields)
});

動作するコード:

export const HistoryType = new GraphQLObjectType({
    name: 'History',
    description: 'History',
    interfaces: () => [NodeInterface],
    isTypeOf: (value) => value instanceof HistoryModel,
    fields: () => ({
    id: {
        type: new GraphQLNonNull(GraphQLID),
        resolve: (obj) => dbIdToNodeId(obj._id, "History")
    },
    timestamp: {
        type: GraphQLLong
    },
    objectId: {
        type: GraphQLString
    },
    user: {
        type: require('../User/connections').default,
        args: connectionArgs,
        resolve: (source, args) => {
            return UserModel.findOne({ id: source.id }).exec();
        }
    },
    action: {
        type: new GraphQLNonNull(GraphQLString)
    }
})
});

私の「JavaScriptサンクにあまり熟練していない」という観点からすると、両方のコードは同じですが、2番目のコードだけが機能するわけではありません。

a) コードが同じように動作しないのはなぜですか? サンク コンテンツを関数 ( fields) に格納すると、動作が異なるのはなぜですか?

b) 私のfields変数はコードのシーケンスで使用されるので、コード 1 (実際には変数を保持するコード 1 の修正) のように、オブジェクトを別の変数に保持してサンクを機能させる方法はありますfieldか?

4

0 に答える 0