如何在快递4上发送承诺的收益作为stream?
我有什么办法可以把承诺作为一种传承的结果吗?
在某些情况下,JSON有效负载将是巨大的,将它作为一个stream发送是有道理的。
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); }));
如果你正在读取和加载你的回应的整个对象,那么将很难合理地把它变成stream再次。 无论如何,这里需要stream式JSON实现 。
stream式 Postgress 查询应该是JSONStream的一个很好的来源。
这里有两个例子说明你如何使它工作,我做了一些假设:
-
你可以像这样创build一个元组stream:
[key, data]
你想要放在生成的json中的每个键被发送出去。 这假设你的数据是很多密钥。res.set('content-type','application / json'); keystream.pipe(JSONStream.stringifyObject())。pipe(RES)
-
你能够创build一个对象stream,你想返回作为最后的json响应数组中的项目。
res.set('content-type','application / json'); itemsstream.pipe(JSONStream.stringify())。pipe(RES)