andywer / andywer/threads.js

Observable values not being returned until the process finishes

未關閉
#473 3 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
TypeScript
星號
3.5k
分支
173
PR 合併指標
30 天內沒有已合併 PR

描述

Hi, I'm trying to train a neural network with brain.js in a thread (using Node v20, I tried v18 as well), and I can't seem to get updates from the Observable until the entire thread has finished it's work... I've reproduced the issue in the simplest form here:

```js
// main.js
import { spawn, Worker, Thread } from 'threads'

(async function() {
let worker = await spawn(new Worker("./worker.js"))
worker.longRunningCode().subscribe(progress => console.log(progress))
})()
```

```js
// worker.js
import { expose } from "threads/worker"
import { Observable } from "observable-fns"

expose({
longRunningCode() {
return new Observable(observer => {
observer.next("Started")
for (let i = 0 ; i < 5 ; i++) {
observer.next("Progress " + i)
let startedAt = Date.now()
while (Date.now() - startedAt < 1000) { /* long running code */ }
}
observer.next("Completed")
observer.complete()
})
}
})
```

I would expect to see Progress 0, Progress 1 etc appearing 1 second apart in the console log. Instead, nothing happens for 5 seconds and then I get all the logs at once at the end...

I'm not sure if I'm doing something wrong, or if this is a bug?

貢獻指南

這個儲存庫沒有索引到貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。