Остановить интервал при пустом массиве

Недавно я начал использовать Python, и эта «функция» сбила меня с толку.

Если я хочу поменять значения двух переменных, в JavaScipt я бы сделал следующее:

var a = 0;
var b = 1;

var temp = a;
a = b;
b = temp;

Мне понадобится третья переменная, чтобы временно удерживать одно из значений. Очень простой обмен не будет работать, потому что обе переменные будут иметь одинаковое значение.

var a = 0;
var b = 1;

a = b; // b = 1 => a = 1
b = a; // a = 1 => b = 1

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

Python занимается этим с помощью «более чистого» способа / решения: Назначение набора .

a = 0
b = 1

print(a, b) # 0 1

# temp = a
# a = b
# b = temp

a, b = b, a # values are swapped

print(a, b) # 1 0

Я думаю, таким образом Python автоматически создает переменные «temp», и нам не о чем беспокоиться.

0
задан Sergiodiaz53 4 March 2019 в 22:14
поделиться

2 ответа

takeWhile работает нормально, вам понадобится что-то вроде этого:

const stream = interval(1000)   
  .pipe(
     takeWhile(() => messages.length > 0),
     map(() => messages.pop()),   
  );

Я сделал небольшой пример на stackblitz, надеюсь, вы можете использовать это в своем приложении: https: // stackblitz .com / редактировать / машинопись-sq6wxb? файл = index.ts

0
ответ дан Boris Lobanov 4 March 2019 в 22:14
поделиться

Итак, ваша проблема в том, что stream продолжает излучать даже после того, как messages пуст.

Вы можете использовать takeWhile для завершения потока:

const stream = interval(1000).pipe(
  map((): Message => messages.pop()),
  takeWhile(Boolean),
);

Когда messages пусто, он возвращает undefined, то есть false, когда он превращен в логическое значение, поэтому takeWhile(Boolean) завершит поток.

0
ответ дан martin 4 March 2019 в 22:14
поделиться
Другие вопросы по тегам:

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