1

我有这个流 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 中的 promise 对象,但不确定...谢谢您的关注。

更新

最后我能够得到流数据:

  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] 弃用警告:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

失败的承诺:TypeError:response.getReader 不是函数

有谁知道如何清除它们?

4

0 回答 0