Могу ли я по-прежнему полагаться на pipe (take (1)). Subscribe () для синхронной работы? - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь получить самое последнее состояние наблюдаемой синхронно. Согласно это миграционный документ для ngrx / store 2.0 you can always rely on subscribe() running synchronously if you have to get the state value.

Я не могу найти какую-либо текущую документацию, которая поддерживает это. Это относится и к текущим версиям магазина (например, 7.4.0)?

Пример кода:

method(someId: string): string {
    let value: string;
    this.service.getSomeValue$(someId).pipe(take(1)).subscribe(s => value = s);
    return value;
}

Ответы [ 3 ]

2 голосов
/ 24 мая 2019

Попробуйте это:

    method(someId: string): string {
        let value: string;
        this.service.getSomeValue$(someId).pipe(take(1)).subscribe(s =>
        value = s;
  return value;});

    }
1 голос
/ 24 мая 2019

Если вам нужно знать, выполняется ли какой-то код синхронно, не углубляясь в исходный код, вы можете проверить его.

Установите некоторый асинхронный код (например, setTimeout или Promise (сначала выполняется в очереди макросов, затем в очереди микро)), затем код, который вы хотите протестировать, и затем некоторый синхронный код. Результат должен быть:

  • код, который вы тестируете
  • синхронный код
  • асинхронный код

Если результат такой, ваш код является синхронным.

1 голос
/ 24 мая 2019

Наблюдаемое всегда будет иметь самое последнее состояние (если не создано, чтобы делать иначе).

А синхронный означает, что вы не используете обратные вызовы.

С учетом вышесказанного вы можете просто использовать

async myFunc() {
  lastValue = await myObs$.fromPromise();
}

. Это будет синхронно возвращать последнее значение вашей наблюдаемой.

...