简体   繁体   中英

async await not working with callback node (without promise)

hello guys i got confused why this not working here is my connection js file

    function getConnection(callback) {
        initPool()
        mysql_pool.getConnection((err, conn) => {
            if (err) {
                return callback(err);
            }
               return callback(err, conn);
        });
     }

    function query(queryString, callback) {

        getConnection((err, connection2) => {
            if (connection2 != undefined) {
                if (err) {
                    connection2.destroy();
                return  callback(createDataResponseObject(err, null))
                }
                connection2.query(queryString, function (err, rows) {
                    connection2.destroy();
                    if (!err) {
                        return callback(createDataResponseObject(err, rows))
                    }
                    else {
                        return callback(createDataResponseObject(err, null))
                    }
                });                   
            }

        });
    }
    function createDataResponseObject(error, results) {
        if (error) {
            logger.info(error);
        }
        return {
            error: error,
            results: results === undefined ? null : results === null ? null : results
        }
    }

now when i acquire this connection js in my router.js below is sample code

   var conn=require("./connection")
   router.post('/test',async function(res,req){
      var query ="select * from users"
      let x= await conn.query(result);
      console.log(x)        
   });      

in connection js file i haven't use promise then why async not working in router ie it should still work because im using callback can anyone tell me what im missing or what im doing wrong. when i tried it with return promise in connection.js file it working. i know async return promise

You can only await a promise. conn.query doesn't return a promise. It has no return statement: It returns undefined .

You need to promisify your database functions.

Async/await only works with promises, it's a syntactic sugar on top of it. Ie you can't use the syntax with callbacks.

Check out this link: https://javascript.info/async-await

Async only works with promises, to get things working you have to first convert all of your function to return promises. You can use Promise.promisify() to convert all callback style function to return a promise. Once it is done you can use these function with async-await.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM