Угловое 6 'rxjs / Rx'; наблюдаемый первый () не работает

Я написал это сам:

String.prototype.replacerec = function (pattern, what) {
    var newstr = this.replace(pattern, what);
    if (newstr == this)
        return newstr;
    return newstr.replace(pattern, what);
};

Использование:

"My text".replacerec(/pattern/g,"what");

PS: Как было предложено @lededje, при использовании этой функции в производстве полезно иметь ограничение чтобы избежать переполнения стека.

1
задан Phil 13 July 2018 в 09:51
поделиться

3 ответа

PHOTOS - это массив, поэтому, когда вы выполняете of(PHOTOS), он создаст наблюдаемый, который будет излучать этот массив в качестве первого значения. Когда вы используете метод first , он будет работать, то есть он вернет только первый элемент, испускаемый наблюдаемым, но в этом случае это массив со всеми значениями.

Если вы хотите создать наблюдаемое, которое будет выделять отдельные элементы из каждого элемента массива, который вам нужен, чтобы использовать метод from from(PHOTOS). В этом случае сначала будет работать так, как вы ожидаете.

0
ответ дан Adrian Fâciu 17 August 2018 в 13:14
поделиться

Как уже отмечали другие, элемент, излучаемый потоком, является массивом.

Самое простое решение - добавить еще один оператор:

this.photoService
  .getPhotos()
  .flatMap(photos => photos)
  .first()
  .subscribe(response => console.log(response));

Или в RxJS 6 :

this.photoService
  .getPhotos()
  .pipe(
    flatMap(photos => photos),
    first()
  )
  .subscribe(response => console.log(response));

flatMap позволяет вам возвращать массив без создания наблюдаемого в первую очередь. Он испускает все записи массива индивидуально (например, вы ожидали его в начале).

0
ответ дан a better oliver 17 August 2018 в 13:14
поделиться

Когда вы используете of(PHOTOS), он принимает весь массив и испускает его как отдельный элемент.

Если вы хотите, чтобы getPhotos() излучал каждый элемент массива как единую эмиссию, вы можете использовать from(PHOTOS) .

Вы также можете использовать map, чтобы получить только первый элемент, или вы можете взять первый элемент в подписках:

from(PHOTOS)
  .subscribe(photos => {
    // photos[0]
  });

from(PHOTOS)
  .pipe(
    first(),
  )
  .subscribe(photo => {
    // photo
  });
0
ответ дан martin 17 August 2018 в 13:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: