Обработка обещаний потока NDJSON в Stache Can.js

У меня есть эта конечная точка API потоковой передачи:

https://step3-ndjson-stream-api-demo.glitch.me/

Я пытаюсь выполнить рендеринг с потоком can.js NDJSON, и, следуя примеру, получаю некоторый успешный вывод в console.log, но только первый объект.

Вот мой app.js (усеченный):

const AppViewModel = DefineMap.extend("AppViewModel", {
  // misc. properties, then
  get streamFunct(){
      return fetch(
        'https://step3-ndjson-stream-api-demo.glitch.me/'
      ).then(function(response){
        return ndjsonStream( response.body );
      }).then( ( streamData ) => {

        const reader = streamData.getReader();
        let read;

        reader.read().then( read = ( result ) => {
            if ( result.done ) {
                return;
            }
            console.log( result.value );
            streamData.getReader().read().then( read );
        } );
    } );
  }
});

А вот фрагмент из моего index.stache:

<p>Stream Data: <strong>{{streamFunct}}</strong></p>

И мой взгляд разработчика консоли (обратите внимание на успешный первый вызов):

вид консоли

Я думаю, что я должен обработать объект обещания в index.stache, но не уверен... Спасибо за поиск.

ОБНОВИТЬ

Наконец я могу получить потоковые данные:

  get streamFunct(){
  return fetch(
    'https://step3-ndjson-stream-api-demo.glitch.me/'
  ).then(function(response){
    return ndjsonStream( response.body );
  }).then( ( streamData ) => {

    //retain access to the reader so that you can cancel it
    const reader = streamData.getReader();
    const listResult = document.querySelector('.displayResult ul')
    let read;

    reader.read().then( read = ( result ) => {
        if ( result.done ) {
            console.log('Failed to find match');
            return;
        }
        const chunk = result.value;
        let listItem = document.createElement('li');
        listItem.textContent = chunk.user;
        listResult.appendChild(listItem);

        return reader.read().then(read);
    } ).catch ((error) => {
      console.log(error);
    });
} );

}

И измените мой index.stache:

<p>Stream Data:</p>
<div class="displayResult">
<ul>

</ul>
</div>

Но я все еще получил ошибки / предупреждения:

UnhandledPromiseRejectionWarning: Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту

[DEP0018] Предупреждение об устаревании: отклонение необработанного обещания не рекомендуется. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.

Неисполненное обещание: TypeError: response.getReader не является функцией

Кто-нибудь знает, как их очистить?

0 ответов

Другие вопросы по тегам