我有一个可观察的对象,它返回500个永无止境的随机数流:
public async getSomeMidiNotes(): Promise<Array<number>> {
const notes: Array<number> = new Array<number>();
await this.getRandomMidiNotes()
.pipe(
take(500)
)
.subscribe(note => {
notes.push(note);
});
return notes;
}
public getRandomMidiNotes(): Observable<number> {
return interval(MIDI_NOTE_DURATION)
.pipe(
map(data => Math.floor(Math.random() * MIDI_NOTE_MAX) + MIDI_NOTE_MIN)
);
}
我正在使用它返回一个数组:
const gotes: Array<number> = await this.generatorService.getSomeMidiNotes();
console.log(gotes);
但是在浏览器控制台中显示的数组长度总是不同的,有时是2个,有时是50个,等等...
我希望阵列在返回之前能够完全容纳500个项目。
答案 0 :(得分:0)
public async getSomeMidiNotes(): Promise<Array<number>> {
const notes: Array<number> = new Array<number>();
return getRandomMidiNotes().pipe(
take(500),
map(note => {
notes.push(note);
return notes;
})
).toPromise();
}
用法:
const notes: Array<number> = await this.generatorService.getSomeMidiNotes();
console.log(notes);
stackblitz实现:https://stackblitz.com/edit/rxjs-fcmzrp
map
函数将项目推送到笔记数组并返回。
toPromise
允许您将可观察的转换为承诺。在这种情况下,它会返回诺言,当您致电getSomeMidiNotes
时,您将可以使用await
。