如何在快递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的一个很好的来源。

这里有两个例子说明你如何使它工作,我做了一些假设:

  1. 你可以像这样创build一个元组stream: [key, data]你想要放在生成的json中的每个键被发送出去。 这假设你的数据是很多密钥。

    res.set('content-type','application / json'); keystream.pipe(JSONStream.stringifyObject())。pipe(RES)

  2. 你能够创build一个对象stream,你想返回作为最后的json响应数组中的项目。

    res.set('content-type','application / json'); itemsstream.pipe(JSONStream.stringify())。pipe(RES)