有什么方法可以将 promise 的结果作为 Steam 发送吗?
在某些情况下,JSON 负载会很大,因此将其作为流发送是有意义的。
function aPromise() {
// result of a postgres query. Using `pg`
return Promise.resolve([
{key1: val1, key2: val2 }
]);
});
}
//express 4 router
let wrap = require('co-express');
router.get('/', wrap(function* (req, res, next) {
let payload;
try {
payload = yield aPromise();
} catch (e) {
return next(e);
}
res.json(payload);
}));
如果您要获取响应的整个对象并将其加载到内存中,则很难将其再次合理地转换为流式传输。无论如何,streaming JSON implementation这里需要。
Streaming postgress query应该是 JSONStream 的一个很好的来源。
以下是如何使其发挥作用的两个示例,我在其中做了一些假设:
您可以为要放入要发送的结果 json 中的每个键创建如下所示的元组流:[key, data]
。这假设您的数据是很多键。
res.set('内容类型', 'application/json');keystream.pipe(JSONStream.stringifyObject()).pipe(res)
您可以创建一个对象流,并希望将其作为最终 json 响应的数组中的项目返回。
res.set('内容类型', 'application/json');itemsstream.pipe(JSONStream.stringify()).pipe(res)
我是一名优秀的程序员,十分优秀!