承诺是JavaScript异步操作解决方案,最近看到项目里不少人用了承诺的库类,比如蓝知更鸟,q, jQuery。Deffered等polyfill承诺方式,使用的时候翻看长长的文档,真心累觉不爱。
es5发展到现在,节点在0.12版本就已经支持了承诺,在客户端,大部分浏览器也支持了承诺,如果要兼容低版本的浏览器,可以加上es5-shim等polyfill承诺。下面话不多说,来一起看看详细的介绍:
常承诺用场景。
-
<李>处理异步回调李>
<李>多个异步函数同步处理李>
<李>异步依赖异步回调李>
<李>封装统一的入口办法或者错误处理
李>
<强>
强>
承诺的基本用法,处理异步回调。
函数Pro1 () { 返回新的承诺(函数(解决,拒绝){ setTimeout(函数(){ 解决(“pro1”) },300) }) }//调用 Pro1 () 不要犹豫(功能(数据){//pro1 console.log(数据) }) .catch(函数(err) { 把新的错误(错误) })
有时候我们需要发送两个ajax,希望他们能一起把数据返回,就可以采用下面的办法。
函数Pro1 () { 返回新的承诺(函数(解决,拒绝){ setTimeout(函数(){ 解决(“pro1”) },300) }) } 函数Pro2 () { 返回新的承诺(函数(解决,拒绝){ setTimeout(函数(){ 解决(pro2的) },300) }) }//调用 var Pro=Promise.all ([Pro1 (), Pro2 ())); 箴 不要犹豫(功能(数据){ 控制台。日志([0]的数据,数据[1])//Pro1 Pro2 }) .catch(函数(err) { 把新的错误(错误) })
有些场景是一个异步依赖另一个异步的返回值的,就可以采用下面的用法。
比如:用一个订单号异步取到订单详情,再用订单详情里的商品Id获取到商品详情。
函数Pro1 (orderId) { 返回新的承诺(函数(解决,拒绝){ setTimeout(函数(){ var orderInfo={ orderId: orderId、 productIds:(“123”,“456”) } 解决(orderInfo.productIds) },300) }) } 函数Pro2 (productIds) { 返回新的承诺(函数(解决,拒绝){ setTimeout(函数(){ var产品=productIds.map(函数(productId) { 返回{ productId: productId, 名称:“衣服的 } }) 解决(产品) },300) }) }//调用 Pro1 (“abc123”) 不要犹豫(函数(productIds) { console.log(“商品id ', productIds) 返回Pro2 (productIds) }) 不要犹豫(功能(产品){ console.log(“商品详情”,产品) }) .catch(函数(err) { 把新的错误(错误) })
错误处理
函数ErrorHandler (promiseObj rejectOrResOrCallback) { promiseObj返回。然后(null,函数(err) { 如果(!呃) }) }
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。