Как я могу ждать получения данных книг от клиента GraphQL в асинхронной функции? - PullRequest
0 голосов
/ 07 октября 2018

Я хочу дождаться получения данных книг из запроса graphql перед отправкой объекта ответа

        async getUserBookList(req, res) {
        let responseObj = {};
        const validationRes = this.validateGetUserBookList(req);
          const userId = req.params.id;
          try {
            const userBookList = await dbHelper.filterQuery(
              { user_id: userId },
              "userbook"
            );
            const data = userBookList;
            /**
             * DESCRIPTION: Gets Books based on bookId
             * PARAMS: _id!: string
             * RETURNS: books: [Book]
             */
             await userBookList.map(book => {
              this.fastify.graphQLClient
                .executeQuery({
                  query: books.userBooks({ _id: book.book_id })
                })
                .then(result => {
                 // => here the book is getting added 
                  data["books"] = [result.data.books];
                  console.log(data);
                });
            });
            res.send(data);
          } catch (err) {
            res.send(err);
          }
        } 

Я хотел знать, какие изменения я должен сделать ??в коде, чтобы ответ содержал ключ «книги»

await userBookList.map(book => {
    this.fastify.graphQLClient
        .executeQuery({
            query: books.userBooks({ _id: book.book_id })
        })
        .then(result => {
         // => here the book is getting added 
            data["books"] = [result.data.books];
            console.log(data);
        });
});

1 Ответ

0 голосов
/ 07 октября 2018

Вы можете использовать Promis.all с map.

const booksData = await BPromise.all(
  userBookList.map( (book) =>  
  this.fastify.graphQLClient.executeQuery(
    { 
      query: books.userBooks({ _id: book.book_id })
    })
  ));
...