Angular 8 Http Post 从订阅中获取布尔值
Angular 8 Http Post get boolean value from subscribe
我试图从布尔值 true/false 的 subscribe 中获取价值,但我无法获取价值,这是我目前使用的。
我的 http 旧方法 post.
this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.subscribe(data => this.Success(data), err => this.Error(err));
this.Success(data)
和 this.Error(err)
是现在正在调用的方法,我尝试获取数据的新方法是这样的。
const fData = new FormData();
fData.append('Id', Id.toString());
fData.append('IsActive', IsActive.toString());
const test = this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.subscribe(data => {
this.Success(data);
this.Switch = IsActive;
return this.Switch;
},
err => {
this.Error(err);
this.Switch = !IsActive;
return this.Switch;
});
console.log(test);//Subscriber {closed: false, _parentOrParents: null, _subscriptions: Array(1), syncErrorValue: null, syncErrorThrown: false, …}
console.log(this.Switch);//undefined at first then gives opposite result like true gives false and vice versa
作为this.Switch = IsActive;
布尔值从中取出数据 returns undefined 先是 returns value false 而不是 true,反之亦然。
因为我知道你的问题是因为异步的东西,所以我要在这里写一个解释。简单来说,你不知道异步操作什么时候结束。例如,当您执行 http 功能时,您正在与服务器通信,因此您不知道服务器何时会应答(因为连接速度慢、流量大,或者可能是因为您要求进行繁重的操作)。
为了解决这个问题,我们使用了使用观察者模式的 subscribe() 方法。所以,这里的重点是,因为您不知道服务器或操作(如线程)何时会完成您订阅它并继续观察任何更改或答案。当您收到它时,订阅内的代码就会执行。
您可以在此处了解有关观察者模式的更多信息:https://en.wikipedia.org/wiki/Observer_pattern#:~:text=The%20observer%20pattern%20is%20a,calling%20one%20of%20their%20methods。
和这里的异步理论:https://en.wikipedia.org/wiki/Asynchrony_(computer_programming)
对于您的问题,您可以将值初始化为 false,并将复选框值设置为 [(ngModel)]="Switch",这样当 switch var 更新时,复选框也会更新!
由于它是 可观察的,您不会立即得到响应。所以控制台日志 this.Switch 在成功和错误块中。试试下面的代码片段
const fData = new FormData();
fData.append('Id', Id.toString());
fData.append('IsActive', IsActive.toString());
const test = this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.subscribe(data => {
this.Success(data);
this.Switch = IsActive;
console.log("Success", this.Switch);
return this.Switch;
},
err => {
this.Error(err);
this.Switch = !IsActive;
console.log("Error", this.Switch);
return this.Switch;
});
我不确定这是否会解决您的问题,但肯定会有助于调试以获得您的解决方案。
注意:你得到undefined at first then gives opposite result like true gives false and vice versa
的原因是你在成功或错误块之外安慰this.Switch
,这主要是return 未定义第一个值和下一个 pre-assigned 值。因为 this.Switch 是全局范围变量。
使用 async
和 await
得到结果并且有效。
const test = await this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.toPromise().then((data)=>{
this.Switch = IsActive;
return this.Switch;
}).catch((error)=>{
this.Switch = !IsActive;
return this.Switch;
});
console.log(test); //Same result as below
console.log(this.Switch); //Same result as above
我试图从布尔值 true/false 的 subscribe 中获取价值,但我无法获取价值,这是我目前使用的。
我的 http 旧方法 post.
this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.subscribe(data => this.Success(data), err => this.Error(err));
this.Success(data)
和 this.Error(err)
是现在正在调用的方法,我尝试获取数据的新方法是这样的。
const fData = new FormData();
fData.append('Id', Id.toString());
fData.append('IsActive', IsActive.toString());
const test = this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.subscribe(data => {
this.Success(data);
this.Switch = IsActive;
return this.Switch;
},
err => {
this.Error(err);
this.Switch = !IsActive;
return this.Switch;
});
console.log(test);//Subscriber {closed: false, _parentOrParents: null, _subscriptions: Array(1), syncErrorValue: null, syncErrorThrown: false, …}
console.log(this.Switch);//undefined at first then gives opposite result like true gives false and vice versa
作为this.Switch = IsActive;
布尔值从中取出数据 returns undefined 先是 returns value false 而不是 true,反之亦然。
因为我知道你的问题是因为异步的东西,所以我要在这里写一个解释。简单来说,你不知道异步操作什么时候结束。例如,当您执行 http 功能时,您正在与服务器通信,因此您不知道服务器何时会应答(因为连接速度慢、流量大,或者可能是因为您要求进行繁重的操作)。
为了解决这个问题,我们使用了使用观察者模式的 subscribe() 方法。所以,这里的重点是,因为您不知道服务器或操作(如线程)何时会完成您订阅它并继续观察任何更改或答案。当您收到它时,订阅内的代码就会执行。
您可以在此处了解有关观察者模式的更多信息:https://en.wikipedia.org/wiki/Observer_pattern#:~:text=The%20observer%20pattern%20is%20a,calling%20one%20of%20their%20methods。 和这里的异步理论:https://en.wikipedia.org/wiki/Asynchrony_(computer_programming)
对于您的问题,您可以将值初始化为 false,并将复选框值设置为 [(ngModel)]="Switch",这样当 switch var 更新时,复选框也会更新!
由于它是 可观察的,您不会立即得到响应。所以控制台日志 this.Switch 在成功和错误块中。试试下面的代码片段
const fData = new FormData();
fData.append('Id', Id.toString());
fData.append('IsActive', IsActive.toString());
const test = this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.subscribe(data => {
this.Success(data);
this.Switch = IsActive;
console.log("Success", this.Switch);
return this.Switch;
},
err => {
this.Error(err);
this.Switch = !IsActive;
console.log("Error", this.Switch);
return this.Switch;
});
我不确定这是否会解决您的问题,但肯定会有助于调试以获得您的解决方案。
注意:你得到undefined at first then gives opposite result like true gives false and vice versa
的原因是你在成功或错误块之外安慰this.Switch
,这主要是return 未定义第一个值和下一个 pre-assigned 值。因为 this.Switch 是全局范围变量。
使用 async
和 await
得到结果并且有效。
const test = await this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.toPromise().then((data)=>{
this.Switch = IsActive;
return this.Switch;
}).catch((error)=>{
this.Switch = !IsActive;
return this.Switch;
});
console.log(test); //Same result as below
console.log(this.Switch); //Same result as above