LINUX.ORG.RU

ReadableStream

 , ,


0

1

Как правильно потоковый 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 в примерах какая-то херня, а мне интересно как правильно то делать?

★★

Никто не знает можно ли вместо Uint8Array получать распарсенный json?

JSON.parse(JSON.stringify(data))

Для массивов в Uint8Array можешь использовать Array.from

ahushh ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.