pet*_*ter 3 .net asp.net-web-api visual-studio-2017 angular
我正在从 Angular 调用一个 Web api 方法,如下所示,但是 Web api 方法执行了两次。知道为什么会在这里发生吗?我已经将控制台登录到 Angular 代码中,并确认它从 Angular 调用了一次。但是奇怪的 Web API 方法被执行了两次,就像在线程上运行一样。
角码
public Createsamples(): Observable<any> {
var url = this.baseApiUrl + 'Test/Createsamples';
return this.httpService.post(url, JSON.stringify(obj), { headers: reqHeader, withCredentials: true });
}
Run Code Online (Sandbox Code Playgroud)
网络 API 代码
[System.Web.Http.RoutePrefix("api/Test")]
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class TestApiController
{
[Route("Createsamples")]
[System.Web.Http.HttpPost]
public IHttpActionResult Createsamples()
{
TestBO Bo = new TestBO ();
var result = Bo.Createsamples(obj);
return Ok(result);
}
}
Run Code Online (Sandbox Code Playgroud)
您可能正在处理副作用RxJS
。
可观察量是冷的,不会进行任何计算,除非对其进行任何订阅。
一旦您调用subscribe
或使用,observable | async
计算和副作用就会开始(在您的情况下是网络请求)。
为了避免副作用,您需要Observable
使用运算符进行共享并在模板上shareReplay(1)
重新使用:Observable
// your component code
ngOnInit() {
this.dataSource$ = this.service.apiCall().pipe(
shareReplay(1)
)
}
Run Code Online (Sandbox Code Playgroud)
<!-- On your HTML template -->
<div *ngIf="dataSource$ | async as data">{{data |json }}</div>
<div *ngIf="dataSource$ | async as data">{{data |json }}</div>
Run Code Online (Sandbox Code Playgroud)
尽管从技术上讲,此代码段中有两个订阅,但由于我们进行了Observable
共享,因此您应该只看到 1 个网络请求,并且应该重新使用其结果。
如果您执行this.service.apiCall()
多次,那么每次您创建的新内容Observable
都与其他内容无关,并且无法Observable
共享
您可以在此处阅读有关共享 Observables 和避免副作用的更多信息
归档时间: |
|
查看次数: |
4927 次 |
最近记录: |