Наблюдаемые RxJS вызываются в обратном порядке
У меня есть следующий код, который отправляет 3 действия:
- deleteLineFailed
- showConfirmationMessage
- Подожди 2с
- hideConfirmationMessage
По каким-то причинам я смог заставить его работать только в обратном порядке, что я делаю не так?
const deleteLineEpic = (action$, store) =>
action$.ofType(types.DELETE_LINE_REQUEST)
.flatMap((action) => {
return Observable.of(hideConfirmationMessage(action.line.productID))
.delay(2000)
.merge(
Observable.of(deleteLineFailure(action.line.productID)),
Observable.of(showConfirmationMessage(action.line.productID))
);
}
});
1 ответ
Решение
Я думаю, что происходит следующее:
deleteLine -----X------------
showConfirmation -------Y----------
hideConfirmation --------- 2s -----Z
merge -----X-Y- 2s -----Z
Все 3 потока объединяются, и один с задержкой излучает через две секунды, в то время как другой немедленно запускает действие.
Так что может быть лучше сделать это:
const deleteLineEpic = (action$, store) =>
action$.ofType(types.DELETE_LINE_REQUEST)
.flatMap((action) => {
return Observable.merge(
Observable.of(deleteLineFailure(action.line.productID),
showConfirmationMessage(action.line.productID)),
Observable.of(hideConfirmationMessage(action.line.productID))
.delay(2000)
)}
);
Здесь действия в первом Observable.of
получить сразу же после друг друга, в то время как скрытые действия будут выпущены позже.