Как правильно сделать так, чтобы функция asyn c была членом массива и ожидала этот массив с помощью Rx? - PullRequest
0 голосов
/ 07 апреля 2020

Я играю с Rx JS и пытаюсь определить массив смешанных (как по типу, так и по синхронности) значений, а затем передать его на Rx from.

Однако я бы хотел, чтобы наблюдатели ждали каждого асинхронного значения в массиве и только потом переходили к следующему: так, ObserverA и наблюдательB должны наблюдать только q1 только после 'Three seconds have passed' и, ну, с трехсекундной задержкой.

Я понимаю, что это может излишне изгибать язык, и, возможно, я что-то упускаю из-за того, как работает Rx, но вот что я попробовал.

import { Subject, from } from 'rxjs';

const testmain = async () =>{ 

  var subj = new Subject()
    subj.subscribe({
        next: v => console.log(`observer A: ${v}`)
    })
    subj.subscribe({
        next: v => console.log(`observer B: ${v}`)
    })



    const observable = from([
 await setTimeout(() => {return 'Three seconds have passed'}, 3000),   // am i not invoking something here or is await in the wrong place? Getting an immediate response with value [Object object]
'q1 ', 
'q23',
'error',
'condition',
 4,
 false,
 true])


    observable.subscribe(subj)
}

Выход:

observer A: [object Object]
observer B: [object Object]
observer A: q1
observer B: q1
observer A: q23
observer B: q23
observer A: error
observer B: error
observer A: condition
observer B: condition
observer A: 4
observer B: 4
observer A: false
observer B: false
observer A: true
observer B: true

1 Ответ

0 голосов
/ 07 апреля 2020

Забыл, что тайм-аут не обещание.

import { Subject, from } from 'rxjs';

const testmain = async () =>{ 

  var subj = new Subject()
    subj.subscribe({
        next: v => console.log(`observer A: ${v}`)
    })
    subj.subscribe({
        next: v => console.log(`observer B: ${v}`)
    })



    const observable = from([
 await new Promise( resolver => (setTimeout(() => {resolve ('Three seconds have passed')}, 3000)),   
'q1 ', 
'q23',
'error',
'condition',
 4,
 false,
 true])


    observable.subscribe(subj)
}
...