ionic3 - 可以选择使用 Toast 重试操作不起作用
问题描述
BiographyUpdate
我有一个应用程序,如果某个操作失败(当用户关闭 toast 时,如果他们接受,它应该重试该操作:
@Effect()
public BiographyUpdate: Observable<any> = this._actions.pipe(
ofType(AuthActionTypes.BIOGRAPHY_UPDATE),
map((action: BiographyUpdate) => action.payload),
switchMap(biography => this._profile.updateBiography(`${Environment.Endpoint}/users/update`, biography)
.map(() => new BiographyUpdateSuccess())
.catch(() => Observable.of(new BiographyUpdateFailure(biography)))
)
);
@Effect({ dispatch: false })
public BiographyUpdateFailure: Observable<any> = this._actions.pipe(
ofType(AuthActionTypes.BIOGRAPHY_UPDATE_FAILURE),
map((action: BiographyUpdateFailure) => action.payload),
tap(payload => {
const toast = this._toast.create({
message: "Update failed.",
...ToastDefaults,
duration: 3000,
closeButtonText: 'Retry'
});
toast.onDidDismiss(() => new BiographyUpdate(payload));
toast.present();
})
);
由于该动作是通过 UI 的回调调用的,我认为这种方式会起作用,但该动作再也不会被调用。有什么建议么?
解决方案
想通了,我需要调度动作。这是我更新的失败操作:
为清楚起见,我仅在用户关闭 Toast 时才发送操作,而不是在自动关闭时发送操作。Ionic 没有记录这一点,但这是可能的。
@Effect({ dispatch: false })
public BiographyUpdateFailure: Observable<any> = this._actions.pipe(
ofType(AuthActionTypes.BIOGRAPHY_UPDATE_FAILURE),
map((action: BiographyUpdateFailure) => action.payload),
tap(payload => {
const toast = this._toast.create({
message: "Update failed.",
...ToastDefaults,
duration: 3000,
closeButtonText: 'Retry'
});
toast.onDidDismiss((data, role) => {
if (role === 'close')
return this._store.dispatch(new BiographyUpdate(payload));
});
toast.present();
})
);
推荐阅读
- wordpress - Docker Wordpress 站点中的 URL 问题
- python - How to find data type error in pandas dataframe?
- sql - 仅列出重复的名称
- html - chrome 无法将本地 css 用于简单的本地站点
- javascript - Javascript assign a class that doesn't exist to a variable
- azure-logic-apps - 在 Javascript 中用双引号嵌套替换字符串 - 第 2 部分
- python - Pandas prints out each dataframe cell's corresponding indexes
- javascript - 为什么我的 HTML 文件无法使用我已链接的 JavaScript 文件?
- nginx - 无法访问 Keycloak 管理控制台
- java - SpringBoot DTO + JPA 带列表
财产