更新: 澄清和编辑代码以反映我真正想要的内容,即发送流式响应,即,当他们从自己的async
匹配流程到达时,发回匹配的结果。
考虑(使用expressjs
- ish code)
app.post('/', jsonParser, function (req, res) {
if (!req.body) return res.sendStatus(400)
// matches is not needed for this scenario so
// commenting it out
// var matches = [];
req.body.forEach(function(element, index) {
foo.match(
element,
function callback(error, result) {
if (error) {
console.log(error); // on error
}
else {
⇒ if (some condition) {
// matches.push(result);
⇒ res.send(result);
}
}
}
);
});
// moved this above, inside the callback
// ⇒ res.send(matches);
});
post('/')
的输入是一系列术语。每个字词都使用foo
进行匹配,每次调用后都会callback
。我想发回所有满足"某些条件" (参见上面代码中的⇒)。理想情况下,最好发回流式响应,即在匹配发生时发回响应(因为foo.match()
每个术语可能需要一段时间)。我该怎么做?
答案 0 :(得分:1)
这样的事情对你有用吗?我'我使用了stream-array模块。这可能对你有帮助吗? How to emit/pipe array values as a readable stream in node.js?
var streamify = require('stream-array');
app.post('/', jsonParser, function (req, res) {
if (!req.body) {
return res.sendStatus(400);
}
var matches = [];
req.body.forEach(function (element, index) {
foo.match(
element,
function callback(error, result) {
if (error) {
console.log(error); // on error
} else {
if (some condition) {
streamify([result]).pipe(res);
}
}
}
);
});
// res.json(req.body);
});