程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了通过核心 API 和后台服务从 Angular 轮询大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决通过核心 API 和后台服务从 Angular 轮询?

开发过程中遇到通过核心 API 和后台服务从 Angular 轮询的问题如何解决?下面主要结合日常开发的经验,给出你关于通过核心 API 和后台服务从 Angular 轮询的解决方法建议,希望对你解决通过核心 API 和后台服务从 Angular 轮询有所启发或帮助;

我正在尝试通过 BACkgroundservice 从 Angular 到 .NET Core API 进行轮询。

我将从调用 APIController 的 Angular 组件传递输入,这将触发 BACkgroundservice,并且输出会以频繁的间隔更新回 Angular 组件。

我有几个疑问。

  1. 我可以在没有任何外部库的情况下以这种方式实现轮询吗?
  2. 如何将参数传递给 Worker ExecuteAsync
  3. 如何通过 GET API 调用 BACkgroundservice?

APIController

[APIController]
[Route("[controller]")]
public class TESTController : ControllerBase
{
    private Readonly ILogger<TESTController> _logger;

    public TESTController(ILogger<TESTController> logger)
    {
        _logger = logger;
    }

    [httpGet]
    public async Task<JsonResult> Get(CancellationToken cancellationToken)
    {
        var output = await Worker   //How to call the worker here and then return the output?
        return new JsonResult(output);
    }
}

工人

public class Worker : BACkgroundservice
{
    private Readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

    protected overrIDe async Task ExecuteAsync(CancellationToken stopPingToken)
    {
        while (!stopPingToken.IsCancellationrequested)
        {
            _logger.Loginformation("Worker running at: {timE}",datetiR_275_11845@eOffset.Now);
            await Task.Delay(1000,stopPingToken);
            
           // Process inputs and return outputs in frequent intervals
        }
    }
}

角度组件

import { Component,Inject } from '@angular/core';
import { FormBuilder,FormGroup,FormControl,ValIDators } from '@angular/forms';
import { httpClIEnt } from '@angular/common/http';
import { Observable } from 'rxJs';

@Component({
  SELEctor: 'app-home',templateUrl: './home.component.HTML',})
export class HomeComponent {

  public testForm: FormGroup;
  public test = new  FormControl('1');
  
  constructor(private fb: FormBuilder,http: httpClIEnt,@Inject('BASE_URL') baseUrl: String) {

    const result = interval(2000)
    .pipe(
      switchMap(() => http.get(baseUrl + 'test')),map(res => res))

    result.subscribe(res => {
       this.x.SETVALue(res);
    })
  }
}

解决方法

这里有很多东西,但我认为你只对呼叫工人感兴趣。

第一步。

  1. 在配置服务中 services.AddScoped();

  2. 在控制器构造函数中。

    私有只读 ILogger _logger; 私有只读 Worker _worker; 公共测试控制器(ILogger 记录器,工人工人) { _logger = 记录器; _worker = 工人; }

    compare_out : out std_logic_vector(1 downto 0)
    

启动worker有两种方法。 如果您继承了后台服务,则调用 StartAsync。 如果你已经实现了 IHostedservice,那么你必须自己做。 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visual-studio

注意:我怀疑这种方法不会为您提供更新,因为您正在等待请求完成并且在该结果不会返回之前。

更新

对于长时间运行的后台操作,上述方法将不起作用。为此,您必须做更多的工作。

  1. 当 Angular 调用 API 时。
  2. 在某个表或商店中创建一个具有唯一 ID 的工作项。
  3. 将该唯一 ID 返回给 Angular。
  4. 后台服务将利用商店中可用的数据工作,并在商店中保持更新状态。
  5. 基于 guid 从 Api 返回到 Angular。
  6. 您可以调用另一个 api 函数来检查工作项的状态。

注意:如果您想避免轮询,则可以根据用例使用 SignalR 或 websocket。

大佬总结

以上是大佬教程为你收集整理的通过核心 API 和后台服务从 Angular 轮询全部内容,希望文章能够帮你解决通过核心 API 和后台服务从 Angular 轮询所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:轮询