gpt4 book ai didi

json - 如何在 Express 4 中将 Promise 的 yield 结果作为流发送?

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:53 25 4
gpt4 key购买 nike

有什么方法可以将 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 的一个很好的来源。

以下是如何使其发挥作用的两个示例,我在其中做了一些假设:

  1. 您可以为要放入要发送的结果 json 中的每个键创建如下所示的元组流:[key, data]。这假设您的数据是很多键。

    res.set('内容类型', 'application/json');keystream.pipe(JSONStream.stringifyObject()).pipe(res)

  2. 您可以创建一个对象流,并希望将其作为最终 json 响应的数组中的项目返回。

    res.set('内容类型', 'application/json');itemsstream.pipe(JSONStream.stringify()).pipe(res)

关于json - 如何在 Express 4 中将 Promise 的 yield 结果作为流发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35742367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com