这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战 promise的用法是什么?同步编程通常来说易于调试和维护,然而,异步编程通常能获得更好的性能和更大的灵活性。异步的最大特点是无需等待。“Promises”渐渐成为JavaScript里最重要的一部分,大量的新API都开始promise原理实现。下面让我们看一下什么是promise以及javascript promise的用法。
Promises现状
XMLHttpRequest API是异步的,但它没有使用promise API。但有很多原生的 javascript API 使用了promise:
*Battery API
*fetch API (XHR的替代品)
*ServiceWorker API
Promises将来只会变得越来越流行、普遍,非常重要,所有的前端开发人员都将用到它。另一个值得注意的是,Node.js是基于Promises的平台(很显然,Promise是它的一个核心特征)。
Promise的用法比你想象的要简单——如果你以前喜欢使用setTimeout来控制异步任务的话!
Promise基本用法
new Promise()构造器可以用在传统的异步任务中,就像以前 setTimeout 和 XMLHttpRequest 的用法一样。一个新的 Promise 使用 new 关键字生成,同时,这个 Promises 提供了 resolve 和 reject 函数让我们执行回调操作:
Promise.resolve() 和 Promise.reject() 可以直接被调用。有时候,当判断出 promise 并不需要真正执行时,我们并不需要 使用 new 创建 Promise 对象,而是可以直接调用 Promise.resolve() 和 Promise.reject()。比如:
因为 promise 肯定会返回,所以,我们可以使用 then 和 catch 方法处理返回值!
then 方法
所有的 promise 对象实例里都有一个 then 方法,它是用来跟这个 promise 进行交互的。首先,then 方法会缺省调用 resolve() 函数:
then 回调动作的触发时机是 promise 被执行完。我们还可以串联 then 方法执行回调操作:
打印结果:'first then' 10
'second then' 20
'last then' 40
你会发现,每次 then 调用都会以之前的 then 调用的返回值为参数。
如果一个 promise 已经执行完成,单 then 被再次调用时,回调动作将会被再次执行。而如果这个 promise 里执行的是reject 回调函数,这是再调用 then 方法,回调函数将不会被执行。
catch 方法
catch 当一个 promise 被拒绝(reject)时,catch 方法会被执行:
通常我们在 reject 方法里处理执行失败的结果,而在catch 里执行异常结果:reject(Error('Data could not be found'));
至此,关于promise的用法就简单的介绍到这里了。Promises在过去几年是一个非常火爆的话题,它甚至从JavaScript里抽离出来变成了一个语言架构。相信很快我们将见到有愈来愈多的JavaScript API将使用以promise为基础的模式,学会promise的用法能简化你在JavaScript中的操作。