等待事件发生时返回promise的函数

时间:2018-09-21 17:07:34

标签: javascript asynchronous events async-await

我正在使用一个函数读取发布数据,当它读取“ end”上的所有数据时,它会返回一个promise,问题是当它返回promise时,该函数不会继续。 这是代码:

    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内部的await下面,也可能将req.on end称为twise吗?

1 个答案:

答案 0 :(得分:2)

该函数实际上并不返回Promise,而是返回undefined或拒绝Promise。要使其在等待状态下工作,您必须在函数顶部返回Promise,然后在onend侦听器中调用resolve

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。