Ожидание функции, которая возвращает обещание при возникновении события - PullRequest
0 голосов
/ 21 сентября 2018

Я читаю данные поста с помощью функции, когда она читает все данные в конце, она возвращает обещание, проблема в том, что когда возвращается обещание, функция не возобновляет работу.Это код:

    if (true) {
        log.check(ip, async function (c) {
            if (c) {
                const data = await ReadPost(req).catch(function (err) {
                    console.error(err);
                });

                    console.log("Error:m" + data);

        }
    });
}

function ReadPost(req) {
    var data = "";
    if (req.method === 'POST') {


        req.on('data', function (buffer) {
                data += buffer;
            });

        req.on('end', function () {
            data = data.toString();
            console.log("Data:" + data);
            return Promise.resolve(data);
        });
    }
    else {
        return Promise.reject();
    }
}

}

Я не знаю, возможно ли это сделать таким образом, чтобы решить эту проблему, я бы поместил оставшуюся часть функции под ожидающим внутри.req.on end, также возможно, чтобы требование end было названо twise?

1 Ответ

0 голосов
/ 21 сентября 2018

Функция на самом деле не возвращает обещание, она возвращает undefined или отклоняет обещание.Чтобы заставить его работать с await, вы должны вернуть Promise в верхней части функции, а затем вызвать resolve в слушателе onend:

function ReadPost(req) {
  return new Promise((resolve, reject) => {
    var data = "";
    if (req.method === 'POST') {


      req.on('data', function(buffer) {
        data += buffer;
      });

      req.on('end', function() {
        data = data.toString();
        console.log("Data:" + data);
        resolve(data);
      });
    } else {
      reject();
    }
  });

}

Здесь функция возвращает Promise сразу перед прослушиваниемдо конца, или слушатели данных.

...