我正在使用一个函数读取发布数据,当它读取“ 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吗?
答案 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。