【问题标题】:Typescript Angular Running Background parallel taskTypescript Angular 运行后台并行任务
【发布时间】:2017-11-01 17:23:40
【问题描述】:

在 Angular 4 中编写应用程序时,需要在后台执行一些方法(任务|进程|作业),无论用户当前在做什么,他/她是哪个组件,这些方法都会在后台与其他任务并行运行正在与之交互。并执行该方法,使其不会阻塞其他人。

该后台方法是轮询的实现,因此它会定期按确定的时间间隔向服务器发送请求,询问某个对象的当前状态。

理想情况下,最好知道如何编写这些方法的集合,这些方法在某个时间间隔内向服务器发送请求以询问某些对象的状态。而且它们都不会阻止其他人。

我的问题是编写此类方法/方法集合的最佳和正确方法是什么。

在此先感谢您抽出宝贵时间!

附: :原来我混合了并行性和并发性术语。实际上,无论我在这篇文章中提到并行性 - 我的意思是并发。

并发是指两个或多个任务可以在重叠的时间段内启动、运行和完成。这并不一定意味着它们会同时运行。例如。在单核机器上进行多任务处理。

并行性是指任务实际上同时运行,例如。在一个 多核处理器。

RichieHindle(c)

【问题讨论】:

  • 搜索网络工作者

标签: angular concurrency parallel-processing architecture


【解决方案1】:

我不确定这是否是最佳实践,但我正在运行异步 play() 函数来在我的项目中播放模拟。它有一个while(true) 循环,然后该循环调用socket.io 告诉服务器从模拟发送行到客户端并根据它们更新视图。

适应您的情况:

var updateEveryMS = 1000;  

async poll() {
  while (true) {
    // code to poll server and update models and view ...
  await this.sleep(updateEveryMs);
}

sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

然后在ngAfterViewInit()中调用poll()

ngAfterViewInit() {
  poll();
}

在页面加载后启动它。

【讨论】:

  • 嗯,谢谢,我认为它会起作用,但我认为这不是最好的解决方案
  • @komron 确实,现在想起来,有点笨拙。也许您可以在 ngAfterViewInit 中放入类似 setInterval( () => { poll_server().then( (answer) => { update_view(answer); } ); } , updateEveryMs);其中 poll_server 是一个函数,它返回一个从服务器解析答案的承诺。
  • 另外使用 observables 我认为这也是不错的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多