Как правильно потоковый json обрабатывать?
Набросал пример сервера:
#!/usr/bin/env python
import random
import time
from flask import Flask, Response, jsonify, request, stream_with_context
app = Flask(__name__)
@app.route('/stream')
def streamed_response():
def generate():
while True:
time.sleep(random.uniform(1, 3))
yield jsonify({'r': random.random()}).data
return Response(stream_with_context(generate()), content_type='application/json')
if __name__ == '__main__':
app.run(debug=True)
а вот клиентский код:
(async () => {
const response = await fetch('http://127.0.0.1:5000/stream')
console.log(response)
const reader = response.body.getReader()
for (;;) {
const result = await reader.read()
console.log(result)
if (result.done) {
break
}
let data = new TextDecoder('utf-8').decode(result.value)
data = JSON.parse(data)
console.log(data)
}
})()
Выхлоп:
Promise {<pending>}
VM97:3 Response {type: "basic", url: "http://127.0.0.1:5000/stream", redirected: false, status: 200, ok: true, …}
VM97:8 {value: Uint8Array(30), done: false}
VM97:11 {r: 0.3893236675026768}
VM97:8 {value: Uint8Array(31), done: false}
VM97:11 {r: 0.14124995684129193}
Никто не знает можно ли вместо Uint8Array получать распарсенный json? Так-то оно работает, но даже в документации к fetch на MDN в примерах какая-то херня, а мне интересно как правильно то делать?