要么我错了要么威士忌开始起作用了.(我也不想排除我会变傻的可能性.对此我很抱歉.)
Expectation:
我希望ReplaySubject每2秒返回一个值,因为我在调用next()
之前等待了2秒(每次).
Result:
结果是等待了2秒,但所有值都是output simultaneously.
The code in question is here:
import { ReplaySubject } from 'rxjs';
export const rs$: ReplaySubject<number> = new ReplaySubject();
rs$.subscribe({
next: (data) => console.log(data),
error: (error) => console.warn(error),
complete: () => console.log('ReplaySubject completed'),
});
const fakeAPIValuesOne: Array<number> = [7, 11, 13];
fakeAPIValuesOne.forEach(async (entry: number) => {
await wait(2000); // <--- Why does wait() not work?
rs$.next(entry);
});
function wait(milliseconds: number) {
return new Promise((resolve) => setTimeout(resolve, milliseconds));
}
Question:
我到底做错了什么?
如果你想试试:https://stackblitz.com/edit/rxjs-wpnqvq?file=index.ts
EDIT 1:
SetTimeout也没有效果.下面的代码与上面的代码完全相同:
fakeAPIValuesOne.forEach((value: number) => {
setTimeout(() => {
rs$.next(value);
}, 2000);
});
我想知道next()
怎么能覆盖这里所有的延迟?
EDIT 2
问题解决了,答对了,谢谢!您需要以下详细信息来运行ts文件的根级别等待.
package.json
请注意type部分:
{
"name": "playground",
"version": "1.0.0",
"description": "",
"main": "index.ts",
"scripts": {
"start": "nodemon index.ts",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "MIT",
"dependencies": {
"rxjs": "^7.5.5",
"ts-node": "^10.7.0",
"typescript": "^4.8.0-dev.20220507"
},
"type": "module"
}
nodemon.json
请考虑以下配置以避免错误:TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"
{
"execMap": {
"ts": "node --loader ts-node/esm"
}
}
最后但并非最不重要的tsconfig.json
{
"compilerOptions": {
"module": "ESNext",
"target": "ESNext",
"moduleResolution": "node",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"isolatedModules": true,
"noEmit": true,
"strict": true,
"lib": ["esnext", "DOM"]
}
}