асинхронное ожидание не работает с узлом обратного вызова (без обещания) - PullRequest
0 голосов
/ 10 декабря 2018

Привет, ребята, я запутался, почему это не работает, вот мое соединение 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
        }
    }

теперь, когда я получаю это соединение js в моем router.js ниже приведен пример кода

   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)        
   });      

в файле подключения js. Тогда я не использовал обещание, почему асинхронизация не работает в маршрутизаторе, т.е. она все еще должна работать, потому что я использую функцию обратного вызова, может кто-нибудь сказать мне, что мне не хватает или что яделаю неправильно.когда я попробовал это с обещанием возврата в файле connection.js, это работает.я знаю обещание асинхронного возврата

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Вы можете только ждать обещание.conn.query не возвращает обещание.У него нет оператора return: он возвращает undefined.

Вам необходимо обещать функции вашей базы данных.

0 голосов
/ 10 декабря 2018

Async работает только с обещаниями, чтобы все заработало, сначала нужно преобразовать все свои функции в возвращаемые обещания.Вы можете использовать Promise.promisify (), чтобы преобразовать все функции стиля обратного вызова для возврата обещания.Как только это будет сделано, вы можете использовать эти функции с async-await.

0 голосов
/ 10 декабря 2018

Async / await работает только с обещаниями, это синтаксический сахар поверх него.Т.е. вы не можете использовать синтаксис с обратными вызовами.

Проверьте эту ссылку: https://javascript.info/async-await

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...