0

GraphQL を使用して docker machine api をクエリし、react docker admin スタイル プロジェクトのコンテナーのリストを取得しようとしています。リクエストを行うために dockerode NPM モジュールを使用しています。最初の関数 getCOntainerById は、rethinkdb からいくつかの項目を返す通常の方法です。

docker.listContainers 関数でコンテナー配列を返す方法を理解できないようです。これは、スコープ内でのみ定義され、fetchContainers 関数の戻りの最後で未定義であるためです。

import Docker from 'dockerode'
var docker = new Docker({host: 'http://127.0.0.1', port: 52376});

export default {
  getContainerById: {
    type: Container,
    args: {
      id: {type: new GraphQLNonNull(GraphQLID)}
    },
    async resolve(source, {id}, {rootValue}) {
      isLoggedIn(rootValue);
      const container = await r.table('containers').get(id);
      if (!container) {
        throw errorObj({_error: 'Container not found'});
      }
      return container;
    }
  },
  fetchContainers: {
    type: new GraphQLList(Container),
    async resolve(source, {id}, {rootValue}) {
      isLoggedIn(rootValue);
      docker.listContainers(function(err, containers) {

      });

      if (!containers) {
        throw errorObj({_error: 'Container not found'});
      }

      return containers
    }
  }
};

助けていただければ幸いです。ありがとうございました。

4

1 に答える 1

1
async resolve(source, {id}, {rootValue}) {
  isLoggedIn(rootValue);
  const containers = await new Promise((resolve, reject) => {
    docker.listContainers((err, containers) => {
      if (err) reject(err);
      resolve(containers);
    });
  })

  if (!containers) {
    throw errorObj({_error: 'Container not found'});
  }

  return containers
}
于 2016-05-03T18:14:55.103 に答える