javascript - 尝试不断向浏览器发送异步数据:发送到客户端后无法设置标头?
问题描述
我有queryIterator
一个返回异步对象值的函数result
,我使用回调函数result
通过res.send()
.
错误:(节点:3497)UnhandledPromiseRejectionWarning:错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头
我认为我得到了错误,因为当标题已经设置时,我一直在向浏览器重新发送响应,对吗?
如何从快速服务器连续将数据流式传输到客户端浏览器?
router.post('/', async (req, res) => {
// Assign first query
searchedT = req.body.searchTerm;
queries.push(req.body.searchTerm);
// Invoke the async iterator
console.log("start....");
const results = await queryIterator(queries, async function(result) {
console.log("--->" + await result);
res.send(await result);
});
// res.send(result);
});
async function queryIterator(queries, callback) {
for await (const result of queryGenerator()) {
// console.log('Iterating... ', result);
// console.log(`On Queue Searches #${++counter}: `, queries);
// console.log(`On Queue Searches LAST #${++counter}: `, queries[queries.length-1]);
if (!queries.length) {
console.log("query length is zero");
return result;
}
callback(result);
// return result;
}
}
解决方案
推荐阅读
- android - Diagnostic.getExternalSdCardDetails() 上的 Cordova 诊断异常
- google-oauth - 如何使用限制域(组织域)在 Xenforo 2 中登录 google API
- java - AuditReader find 方法抛出错误(X 不是枚举类型)
- javascript - 无法解析从其他节点程序作为参数传递的 json 字符串
- php - 在 laravel 中验证表单
- identityserver4 - 如何在 Identity Server 4 中设置密码选项
- android - 使用 TextInputLayout 的 setError("") 时出错?
- java - 覆盖 Java 中的异常
- ios - 如何在选定的两个 SCNVector3 点之间加载垂直平面?
- sql - SQL中如何根据col/result只选择一行