为什么 Async Await 不能与 Angular @Action 一起使用
Why is Async Await not working with Angular @Action
这可行,但如果可能,我想在链中添加更多操作。
this.store.dispatch(new UploadPendingFiles(pendingFiles));
this.actions$.pipe(ofActionSuccessful(UploadPendingFiles)).subscribe(() => {
alert('UploadPendingFilesComplete');
this.store.dispatch(new CreateEmailLink(this.getPayload())).subscribe(
() => {
this.sent.emit('true');
},
(error) => {
console.log(error);
this.errors$.next(error.messages);
}
);
});
想要使用更多异步等待的这种风格,但它会在错误的时间触发。
this.store.dispatch(new UploadPendingFiles(pendingFiles));
alert('UploadPendingFilesComplete');
// Need alert to proc here
await this.actions$.pipe(ofActionSuccessful(UploadPendingFiles));
// await Another @Action
await this.store.dispatch(new CreateEmailLink(this.getPayload()));
// Alert procs here at the moment
一段@Action
@Action(UploadPendingFiles)
uploadPendingFiles(ctx: StateContext<DriveStateModel>, action: UploadFiles) {
return this.uploads.start(action.files, config).pipe(
tap((response) => {
}
}
async/await 只是用于 Promise
的语法。您不能将它与 Observable
等其他任何内容一起使用,即 action$
.
等待动作的结果有点奇怪,应该用 correlationId
来完成,这会使代码更加复杂。这就是为什么我不想在这些情况下使用 Redux 的 Effect 的原因。
store.dispatch()
returns 一个 Observable
成功完成。您可以执行以下操作:
this.store.dispatch(new UploadPendingFiles(pendingFiles)).pipe(
concatMap(() => this.store.dispatch(new CreateEmailLink(this.getPayload()))
).subscribe(() => {
// Alert procs here at the moment
});
显然你也应该可以使用 .toPromise()
,但我建议你不要那样做,因为 Observables
更灵活。如果你想做promises,你可以这样做:
async whatEverMethod(): Promise<any> {
await this.store.dispatch(new UploadPendingFiles(pendingFiles)).toPromise();
await this.store.dispatch(new CreateEmailLink(this.getPayload()).toPromise();
//alert procs here at the moment
}
这可行,但如果可能,我想在链中添加更多操作。
this.store.dispatch(new UploadPendingFiles(pendingFiles));
this.actions$.pipe(ofActionSuccessful(UploadPendingFiles)).subscribe(() => {
alert('UploadPendingFilesComplete');
this.store.dispatch(new CreateEmailLink(this.getPayload())).subscribe(
() => {
this.sent.emit('true');
},
(error) => {
console.log(error);
this.errors$.next(error.messages);
}
);
});
想要使用更多异步等待的这种风格,但它会在错误的时间触发。
this.store.dispatch(new UploadPendingFiles(pendingFiles));
alert('UploadPendingFilesComplete');
// Need alert to proc here
await this.actions$.pipe(ofActionSuccessful(UploadPendingFiles));
// await Another @Action
await this.store.dispatch(new CreateEmailLink(this.getPayload()));
// Alert procs here at the moment
一段@Action
@Action(UploadPendingFiles)
uploadPendingFiles(ctx: StateContext<DriveStateModel>, action: UploadFiles) {
return this.uploads.start(action.files, config).pipe(
tap((response) => {
}
}
async/await 只是用于 Promise
的语法。您不能将它与 Observable
等其他任何内容一起使用,即 action$
.
等待动作的结果有点奇怪,应该用 correlationId
来完成,这会使代码更加复杂。这就是为什么我不想在这些情况下使用 Redux 的 Effect 的原因。
store.dispatch()
returns 一个 Observable
成功完成。您可以执行以下操作:
this.store.dispatch(new UploadPendingFiles(pendingFiles)).pipe(
concatMap(() => this.store.dispatch(new CreateEmailLink(this.getPayload()))
).subscribe(() => {
// Alert procs here at the moment
});
显然你也应该可以使用 .toPromise()
,但我建议你不要那样做,因为 Observables
更灵活。如果你想做promises,你可以这样做:
async whatEverMethod(): Promise<any> {
await this.store.dispatch(new UploadPendingFiles(pendingFiles)).toPromise();
await this.store.dispatch(new CreateEmailLink(this.getPayload()).toPromise();
//alert procs here at the moment
}