我有这个流 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 不是函数
有谁知道如何清除它们?