合并await和Promise.all在我的node.js微服务中不起作用

时间:2019-02-27 00:21:55

标签: javascript node.js async-await es6-promise

我有一个非常复杂的node.js微服务,它也使用graphql,首先查询数据库,然后用返回值填充数组,然后在await和Promise.all调用中运行graphql突变。使用以下代码,我不断收到错误消息:“必须在异步函数中使用await”-但是,我已经将所有内容包装在了asyn函数中!有人可以指出我做错了吗? (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
     };

0 个答案:

没有答案