首页 > 解决方案 > 结合 await 和 Promise.all 在我的 node.js 微服务中不起作用

问题描述

我有一个非常复杂的 node.js 微服务,它也使用了 graphql,首先查询数据库,然后用返回值填充一个数组,然后在 await 和 Promise.all 调用中运行一个 graphql 突变。使用以下代码,我不断收到错误消息:“必须在异步函数中使用等待”-但是,我已经将所有内容都包装在了异步函数中!有人可以指出我做错了什么吗?(PS:可能还有其他我没有看到的错误,因为我无法克服第一个错误)

注意:这个问题不是重复的 - 另一个问题的函数名称有问题 - 在我的函数中,名称是 resolve() - 没有额外的函数名称。

  const QryAllBooks = {
    type: new GraphQLList(BookType),
    args: {},
    async resolve(){
          return new Promise((resolve, reject) => {
             let sql = singleLineString`
                  select distinct t.bookid,t.bookname,t.country
                  from books_tbl t
                  where t.ship_status = 'Not Shipped'
              `;
             pool.query(sql, (err, results) => {
               if(err){
                  reject(err);
               }
               resolve(results);

            const str = JSON.stringify(results);
            const json = JSON.parse(str);

            const promises = [];
            for (let p = 0; p < results.length; p++){
               const book_id = json[p].bookid;
               const query = `mutation updateShipping
                              {updateShipping
                               (id: ${book_id}, input:{
                                  status: "Shipped"
                               })
                               { bookid
                                 bookname }}`
                promises.push( query );
           }

          //I need an await function so that apolloFetch  
          //goes in sequence of bookid, one after the other

         await Promise.all(Object.values(input).map(async (promises, i) => {
                  apolloFetch({ promises[i]});
                  })
                 .catch(( e ) => {
                     errorLogger( 29, 'Error', e );
                 )};
                  });
            });
        }
      };

     module.exports = {
          QryAllBooks,
          BookType
     };

标签: javascriptnode.jsasync-awaites6-promise

解决方案


推荐阅读