RxJS Observables 以相反的顺序调用
RxJS Observables called in the reverse order
我有以下代码分派 3 个动作:
- 删除行失败
- showConfirmationMessage
- 等待2秒
- 隐藏确认信息
由于某些原因,我唯一能够让它工作的方法是按相反的顺序,我做错了什么?
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))
);
}
});
我认为会发生以下情况:
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
中的动作会立即依次发出,而隐藏动作则稍后发出。
我有以下代码分派 3 个动作:
- 删除行失败
- showConfirmationMessage
- 等待2秒
- 隐藏确认信息
由于某些原因,我唯一能够让它工作的方法是按相反的顺序,我做错了什么?
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))
);
}
});
我认为会发生以下情况:
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
中的动作会立即依次发出,而隐藏动作则稍后发出。