角度 9 - 异步最佳实践?

     2023-02-19     235

关键词:

【中文标题】角度 9 - 异步最佳实践?【英文标题】:angular 9 - async best practises? 【发布时间】:2020-08-26 16:15:06 【问题描述】:

从 8 升级到 9 后,html 中的异步逻辑不再起作用。

喜欢这个

<div id="app" *ngIf="(applicationsList$ | async) as applicationsList"> <app-search-filter [(applicationsList)]="applicationsList"></app-search-filter> </div>

本期结束https://github.com/angular/angular/issues/34405 在常春藤指南上 https://next.angular.io/guide/ivy-compatibility.

如果你使用它,它现在会抛出一个错误。

无法将值“$event”分配给模板变量“applicationsList”中的错误。模板变量是只读的。

我认为这不是反模式,因为您可以使用它轻松处理变更检测。

我现在的问题:

替换这种代码以消除错误的最佳做法(优雅方式)是什么?

我知道可以改用 promise,但这真的是最好的方法吗?:

.ts

this.applicationsList = await this.applicationApi.getList().toPromise(); 

.html

<div id="app">
  <app-search-filter [(applicationsList)]="applicationsList"></app-search-filter>
</div>

编辑:

如果您在开发控制台中看到错误,这里是 Stackblitz:

https://stackblitz.com/edit/angular-ivy-taatzh

【问题讨论】:

模式本身看起来并没有错。你能在 stackblitz 中重现这个问题吗? 试试这个,在后面的代码中订阅异步调用。将调试器语句放入订阅中。注释掉 html 代码。放入新的 div 中没有任何内容。重新启动导航,然后告诉我们按 f12 进行调试后会发生什么。您应该看到断点命中。你看到了什么价值观? 另外,正如 GitHub 问题中所述,[(applicationsList)]="applicationsList" 可能是错误的来源,而不是使用 async 管道。 我已经将GitHub issue cmets中的stackblitz升级到Angular v9,模式本身的使用还可以。 stackblitz.com/edit/ng-issue-34405-ppcbhy该问题的现场演示将使该问题受益。 @KurtHamilton 您的 stackblitz 版本为 8 。我用错误更新了我的答案 【参考方案1】:

将模板变量传递到输出中有点奇怪,但如果你只想简单地使用对象。

<div id="app" *ngIf="list: applicationsList$ | async as data">
    <app-search-filter [(applicationsList)]="data.list"></app-search-filter>
</div>

我会编写一个单独的处理程序并将模板更新为

<div id="app" *ngIf="(applicationsList$ | async) as applicationsList">
  <app-search-filter [applicationsList]="applicationsList" (applicationsList)="update($event)"></app-search-filter>
</div>

【讨论】:

异步编程最佳实践

】异步编程最佳实践【英文标题】:Asynchronousprogrammingbestpractices【发布时间】:2011-08-1201:04:18【问题描述】:我最近编写了我的第一个Android应用程序,大约有8,000-10,000行代码。一直阻碍我使用正常设计模式的一件事是android大量... 查看详情

服务之间异步通信的最佳实践

】服务之间异步通信的最佳实践【英文标题】:Bestpracticeforasynccommunicationbetweenservices【发布时间】:2012-04-1216:07:56【问题描述】:以下场景中最好/好的服务绑定/通信实践是什么(希望标题有点意思):一个业务层(BL)包含多个服... 查看详情

构建异步邮件的最佳实践(使用 Sidekiq)

】构建异步邮件的最佳实践(使用Sidekiq)【英文标题】:Bestpracticeonstructuringasynchronousmailers(usingSidekiq)【发布时间】:2013-11-0600:06:45【问题描述】:只是想知道在我的Rails应用程序中构建异步邮件的最佳方法是什么(使用Sidekiq)... 查看详情

是否有实现异步游戏引擎循环的最佳实践?

】是否有实现异步游戏引擎循环的最佳实践?【英文标题】:Aretherebestpracticesforimplementinganasynchronousgameengineloop?【发布时间】:2011-01-0203:33:17【问题描述】:我已经实现了一个游戏引擎循环如下:publicstaticBooleanStart()if(hasBoard)//sta... 查看详情

在 redux 中处理异步操作错误的最佳实践是啥?

】在redux中处理异步操作错误的最佳实践是啥?【英文标题】:Whatisthebestpracticeforhandlingasyncactionerrorsinredux?在redux中处理异步操作错误的最佳实践是什么?【发布时间】:2019-01-0400:31:10【问题描述】:exportconstsaveSomething=(thing=)=>... 查看详情

Cassandra 异步读写,最佳实践

】Cassandra异步读写,最佳实践【英文标题】:CassandraAsyncreadsandwrites,Bestpractices【发布时间】:2018-11-2407:50:08【问题描述】:要设置上下文,我们在cassandra中有4个表,其中4个是数据表,剩下的一个是搜索表(假设DATA、SEARCH1、SEARC... 查看详情

为异步方法创建和关闭 WCF 客户端的最佳实践

】为异步方法创建和关闭WCF客户端的最佳实践【英文标题】:BestpracticeswithcreatingandclosingWCFclientsforasyncmethods【发布时间】:2012-04-2823:56:13【问题描述】:我熟悉创建WCF客户端、调用标准方法、然后在完成后关闭或中止客户端的最... 查看详情

ngFor 中嵌套异步的最佳实践?

】ngFor中嵌套异步的最佳实践?【英文标题】:BestpracticesfornestedasyncinsideofngFor?【发布时间】:2021-11-1510:51:12【问题描述】:假设我有一个汽车清单:constcars:Array<carId:number>=[carId:1,carId:2];然后我在模板中渲染它们:<div*ngFor=... 查看详情

Laravel 异步请求的最佳实践

】Laravel异步请求的最佳实践【英文标题】:BestPracticeforLaravelAsynchronousRequests【发布时间】:2018-02-2214:04:00【问题描述】:我有一个Laravel应用程序。当我在控制器中每页只创建3-10个API时,应用程序加载得非常好。现在,当我开始... 查看详情

在 webapi 中使用异步等待的最佳实践

】在webapi中使用异步等待的最佳实践【英文标题】:bestpracticeforusingasyncawaitinwebapi【发布时间】:2017-07-0516:39:28【问题描述】:我有.NET核心WebAPI作为服务层。服务层有所有的EF代码。如果有带有此代码的基本控制器protectedTask<IA... 查看详情

Flutter:从 UI 调用异步代码的最佳实践

】Flutter:从UI调用异步代码的最佳实践【英文标题】:Flutter:BestPracticesofCallingAsyncCodefromUI【发布时间】:2018-08-1414:15:31【问题描述】:我正在开发一个Flutter应用程序,但想知道从UI调用异步代码时应该怎么做-比如说UI小部件的构... 查看详情

rabbitmq实战:消息通信模式和最佳实践

...程,以及如何运行和管理RabbitMQ,这篇将站在开发模式的角度理解「面向消息通信」带来的好处,以及在各种场景下的最佳实践。通过介绍,你会了解到:面向消息通信的好处发后即忘模型用RabbitMQ实现RPC面向消息通信的好处主... 查看详情

在 Android 中发出异步 HTTP 请求是不是有公认的最佳实践?

】在Android中发出异步HTTP请求是不是有公认的最佳实践?【英文标题】:Isthereanacceptedbest-practiceonmakingasynchronousHTTPrequestsinAndroid?在Android中发出异步HTTP请求是否有公认的最佳实践?【发布时间】:2010-10-2402:50:36【问题描述】:我... 查看详情

iOS - 在 Swift 中获取集合的异步属性的最佳实践

】iOS-在Swift中获取集合的异步属性的最佳实践【英文标题】:iOS-BestpracticetogetasyncpropertiesofcollectioninSwift【发布时间】:2016-07-2608:53:45【问题描述】:在Swift中使用PHAsset时,我遇到了一个常见问题,必须有一个好的设计/解决方案... 查看详情

使用 fetch 在节点中进行异步 api 调用的最佳实践?

】使用fetch在节点中进行异步api调用的最佳实践?【英文标题】:Bestpracticeformakingasyncapicallsinnodeusingfetch?【发布时间】:2020-08-1912:15:30【问题描述】:我正在nodeJS、express和mysql中构建一个应用程序,在其中我使用nodefetch从几个不... 查看详情

celery学习---celery最佳实践之与django结合实现异步任务

django可以轻松跟celery结合实现异步任务,只需简单配置即可同步执行和异步执行注意:即使Celery的任务没有执行完成,但是已经创建了任务ID。可以利用前台的定时任务发送Ajax异步请求根据ID查询结果项目整合项目的目录结构:... 查看详情

将 Django 模型中的保存方法覆盖为使用 celery 异步的最佳实践

】将Django模型中的保存方法覆盖为使用celery异步的最佳实践【英文标题】:bestpracticetooverridesavingmethodindjangomodeltobeasyncusingcelery【发布时间】:2014-03-2014:06:14【问题描述】:我正在构建一个云系统,我有两个应用程序,包含完整... 查看详情

express开发与部署最佳实践--待续

链接 nginx代理缓存 压缩等 全部采用异步  使用trycatch 处理同步异常 promise处理异步异常, 而不是使用domains 或者 uncaughtException  查看详情