gpt4 book ai didi

javascript - switchMap 操作只在第一次调用时运行?

转载 作者:数据小太阳 更新时间:2023-10-29 04:35:58 29 4
gpt4 key购买 nike

我有一个 Angular 应用程序,它向 Http 服务发出请求并在另一个 Http 服务上调用 switchMap。由于某种原因,switchMap 中的请求仅在第一次调用父调用时运行。否则父请求会触发而 switchMap 不会,这里是代码:

this._receivableService.newTenantDebitCredit(tenantCredit)
.take(1)
.switchMap(result =>
// Refresh the lease receivables before giving result
this._receivableService.getAll({
refresh: true,
where: { leaseId: this.leaseId }
}).take(1).map(() => result)
)
.subscribe(
...
)

每次在其上方调用 newTenantDebitCredit 方法时,如何使切换映射中的 getAll 请求运行?

编辑:这是在单击 时调用的完整函数。当我第一次单击给定单元的按钮时,两种方法都会执行。如果我尝试一个已经调用了该方法的单元(没有刷新),则只执行第一个方法。我意识到其中很多内容可能还不清楚,目前这是一个相当大的项目。

public submitTenantCredit() {
this.isLoading = true;
let tenantCredit: NewTenantDebitCreditData;
let receivableDefinitions: ReceivableDefinition[] = [];

// construct receivable defintions for NewTenantDebitData model
receivableDefinitions = this._constructReceivableDefinitions();

// construct data we will be POSTing to server.
tenantCredit = new NewTenantDebitCreditData({
siteId: this._apiConfig.siteId,
leaseId: this.leaseId,
isCredit: true,
receivables: receivableDefinitions,
reason: this.actionReason
});

// make service call and handle response
this._receivableService.newTenantDebitCredit(tenantCredit)
.take(1)
.switchMap(result =>
// Refresh the lease receivables before giving result
this._receivableService.getAll({
refresh: true,
where: { leaseId: this.leaseId }
}).take(1).map(() => result)
)
.take(1)
.subscribe(
(receivables) => {
this.closeReasonModal();
let refreshLeaseId = this.leaseId;
this.leaseId = refreshLeaseId;
this.isLoading = false;
this.refreshBool = !this.refreshBool;
this._debitCreditService.refreshUnitInfo();
this._notifications.success(`The tenant credit for ${this.customerName} - Unit ${this.unitNumber} was submitted successfully`);
},
(error) => {
console.error(error);
this.isLoading = false;
}
)
}

如果有帮助 newTenantDebitCredit() 是一个 HTTP POST 请求并且 getAll() 是一个 GET 请求.

最佳答案

您使用了 take 运算符。当您的服务 observable 将发出时,take 运算符将首先执行,而 take 将仅首先从 observable 发出。随后的发射将不会被您的代码占用。如果你想从 observable 中获取所有发射,那么从你的代码中删除 take。

希望对您有所帮助。

关于javascript - switchMap 操作只在第一次调用时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47946350/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com