gpt4 book ai didi

javascript - 无法在 Node 中使用 ndjson 流,但类似的代码在 React 中有效

转载 作者:行者123 更新时间:2023-12-04 14:48:36 24 4
gpt4 key购买 nike

我正在尝试使用来自 this endpoint on lichess.org 的数据.

这是一个使用该数据流的 React 组件的最小工作示例。我正在使用一个名为 can-ndjson-stream 的库.

import ndjsonStream from "can-ndjson-stream"
import { useEffect } from "react"

function App() {
useEffect(() => {
fetch("https://lichess.org/api/tv/feed")
.then(res => ndjsonStream(res.body))
.then(stream => {
const streamReader = stream.getReader()
streamReader.read().then(async res => {
while (!res || !res.done) {
res = await streamReader.read()
console.log(res.value)
}
})
})
.catch(console.error)
}, [])
return <>Lorem Ipsum</>
}

export default App

但是,如果我尝试编写相同的代码并像这样在 Node 中运行它:

import ndjsonStream from "can-ndjson-stream"
import fetch from "node-fetch"

fetch("https://lichess.org/api/tv/feed")
.then(res => ndjsonStream(res.body))
.then(stream => {
const streamReader = stream.getReader()
streamReader.read().then(async res => {
while (!res || !res.done) {
res = await streamReader.read()
console.log(res.value)
}
})
})
.catch(console.error)

我收到这个错误:

ReferenceError: ReadableStream is not definedat ndjsonStream

所以看起来从 fetch 中获取的 res 是 null 或 undefined,但是获取其他 API 工作正常。

我也试过使用 axios而不是 node-fetch像这样:

import ndjsonStream from "can-ndjson-stream"
import axios from "axios"

axios
.get("https://lichess.org/api/tv/feed")
.then(res => ndjsonStream(res.data))
.then(stream => {
const streamReader = stream.getReader()
streamReader.read().then(async res => {
while (!res || !res.done) {
res = await streamReader.read()
console.log(res.value)
}
})
})
.catch(console.error)

但它只是挂起并且没有显示任何输出。感谢任何可以阐明这一点或提供任何替代方法在 Node 中运行它的人。

最佳答案

多亏了 tromgy 的评论,我才能够做出一些有用的东西。我和图书馆一起去了hyperquest帮助处理流的请求和管道。我还使用了 ndjson图书馆。

这是一些工作代码:

hyperquest("https://lichess.org/api/tv/feed")
.pipe(ndjson.parse())
.on("data", console.log)

请注意,您可以在对象到达时使用 on() 的第二个参数对其进行操作,如下所示。

...
.on("data", (obj) => {
foo(obj)
})

关于javascript - 无法在 Node 中使用 ndjson 流,但类似的代码在 React 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69506089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com