JS中如何使用Promise和async await
JS中如何使用Promise和async await
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
Promise 与 Async/Await 的比较
343浏览 • 1回复 待解决
HarmonyOS async/await promise是在哪个线程,如何判断主线程还是子线程
436浏览 • 1回复 待解决
HarmonyOS ArkTS如何不使用await/async把异步方法改为同步方法?
195浏览 • 1回复 待解决
在@Watch函数中调用async await,UI刷新特别慢是什么原因?
361浏览 • 1回复 待解决
taskpool 执行的 async 函数和普通返回 promise 函数的一些差异问题
1929浏览 • 1回复 待解决
js api 中select组件如何使用
6858浏览 • 2回复 已解决
HarmonyOS Promise & taskpool使用问题
199浏览 • 1回复 待解决
sync和await的区别是什么?
278浏览 • 1回复 待解决
promise怎么写?http封装时使用promise报错,去除promise正常,但是一加就都变红
53浏览 • 1回复 待解决
使用js如何使用callback
254浏览 • 1回复 待解决
HarmonyOS关于异步Promise的使用问题
339浏览 • 1回复 待解决
JS API 中 web组件 怎么使用
5258浏览 • 1回复 待解决
TS和JS哪个使用起来更好
2032浏览 • 2回复 已解决
JS UI框架中FA和PA的page之间如何通信?
2677浏览 • 1回复 待解决
如何在 ArkTS 中定义和使用接口?
37浏览 • 0回复 待解决
使用Promise实现一种串行调用方式
948浏览 • 1回复 待解决
HarmonyOS中使用async为什么不会阻塞主线程?
25浏览 • 0回复 待解决
想请问一下Promise的实现原理,以及Promise和TaskPool/Worker有什么区别呢?
155浏览 • 1回复 待解决
JS中的Textarea组件中的value属性无法正常使用,如何解决
12974浏览 • 2回复 待解决
前端开发中,DOM对象和JS对象的区别?
2407浏览 • 1回复 待解决
ArkTS中的as与js和ts中的as有什么具体区别
1845浏览 • 1回复 待解决
HarmonyOS关于async或者promise,基于事件循环调度机制,会存在比如for循环多次导致事件栈溢出、内存过大
312浏览 • 1回复 待解决
在ArkTS的主线程中使用await会堵塞主线程吗
2069浏览 • 1回复 待解决
如何获取和使用AppScope中配置的资源?
112浏览 • 1回复 待解决
如何在Page中向使用 Web 组件的 js 方法传递数据?
2946浏览 • 1回复 待解决
Promise 术语
Promise 有三种状态:
注意,这里的“成功”或“失败”的含义取决于所使用的 API:例如,fetch() 认为服务器返回一个错误(如404 Not Found)时请求成功,但如果网络错误阻止请求被发送,则认为请求失败。
有时用已敲定(settled) 这个词来同时表示已兑现(fulfilled) 和已拒绝(rejected) 两种情况。
如果一个 Promise 处于已决议(resolved)状态,或者它被“锁定”以跟随另一个 Promise 的状态,那么它就是已兑现(fulfilled)。
合并使用多个 Promise
当某个操作由几个异步函数组成,而且开发者需要在开始下一个函数之前完成之前每一个函数时,开发者需要的就是 Promise 链。但是在其他的一些情况下,开发者可能需要合并多个异步函数的调用,Promise API 为解决这一问题提供了帮助。
有时开发者需要所有的 Promise 都得到实现,但它们并不相互依赖。在这种情况下,将它们一起启动然后在它们全部被兑现后得到通知会更有效率。这里需要 Promise.all()方法。它接收一个 Promise 数组,并返回一个单一的 Promise。
由Promise.all()返回的 Promise:
async 和 await
async关键字为开发者提供了一种更简单的方法来处理基于异步 Promise 的代码。在一个函数的开头添加 async,就可以使其成为一个异步函数。
在异步函数中,可以在调用一个返回 Promise 的函数之前使用await 关键字。这使得代码在该点上等待,直到 Promise 被完成,这时 Promise 的响应被当作返回值,或者被拒绝的响应被作为错误抛出。这使我们能够编写像同步代码一样的异步函数。
开发者可能会在需要使用 Promise 链地方使用 async 函数,这也使得 Promise 的工作更加直观。
记住,就像一个 Promise 链一样,await 强制异步操作以串联的方式完成。如果下一个操作的结果取决于上一个操作的结果,这是必要的,但如果不是这样,像 Promise.all() 这样的操作会有更好的性能。
小结
Promise 是现代 JavaScript 异步编程的基础。它避免了深度嵌套回调,使表达和理解异步操作序列变得更加容易,并且它们还支持一种类似于同步编程中 try...catch 语句的错误处理方式。
async 和 await 关键字使得从一系列连续的异步函数调用中建立一个操作变得更加容易,避免了创建显式 Promise 链,并允许开发者像编写同步代码那样编写异步代码。