国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

Javascript中Promise的四種常用方法總結

2024-05-06 16:38:24
字體:
來源:轉載
供稿:網友

前言

Promise是JavaScript異步操作解決方案,最近看到項目里不少人用了Promise 的庫類,比如 bluebird、q 、jQuery.Deffered 等 polyfill javascript/37101.html">promise 方式,使用的時候翻看長長的文檔,真心累覺不愛。

es5 發展到現在,node 在0.12版本就已經支持了promise, 在客戶端,大部分瀏覽器也支持了Promise, 如果要兼容低版本的瀏覽器,可以加上es5-shim等 polyfill promise。下面話不多說,來一起看看詳細的介紹:

用法

Promise 常用場景。

  • 處理異步回調
  • 多個異步函數同步處理
  • 異步依賴異步回調
  • 封裝統一的入口辦法或者錯誤處理

一、處理異步回調

Promise 的基本用法, 處理異步回調。

function Pro1(){ return new Promise(function(resolve, reject) {  setTimeout(function(){   resolve('pro1')  }, 300) })}//調用Pro1().then(function(data){ console.log(data) //pro1}).catch(function(err){ throw new Error(err)})

二、多個異步函數同步處理

有時候我們需要發送兩個ajax,希望他們能一起把數據返回,就可以采用下面的辦法。

function Pro1(){ return new Promise(function(resolve, reject) {  setTimeout(function(){   resolve('pro1')  }, 300) })}function Pro2(){ return new Promise(function(resolve, reject) {  setTimeout(function(){   resolve('pro2')  }, 300) })}//調用var Pro = Promise.all([Pro1(), Pro2()]);Pro.then(function(data){ console.log(data[0], data[1]) //Pro1 Pro2}).catch(function(err){ throw new Error(err)})

三、異步依賴異步回調

有些場景是一個異步依賴另一個異步的返回值的,就可以采用下面的用法。

比如: 用一個訂單號異步取到訂單詳情,再用訂單詳情里的商品Id獲取到商品詳情。

function Pro1(orderId){ return new Promise(function(resolve, reject) {  setTimeout(function(){   var orderInfo = {    orderId: orderId,    productIds: ['123', '456']   }   resolve(orderInfo.productIds)  }, 300) })}function Pro2(productIds){ return new Promise(function(resolve, reject) {  setTimeout(function(){   var products = productIds.map(function(productId){    return {     productId: productId,     name: '衣服'    }   })   resolve(products)  }, 300) })}//調用Pro1('abc123').then(function(productIds){ console.log('商品id',productIds)  return Pro2(productIds)}).then(function(products){ console.log('商品詳情',products) }).catch(function(err){ throw new Error(err)})

四、封裝統一的入口辦法或者錯誤處理

錯誤處理

function ErrorHandler(promiseObj, rejectOrResOrCallback){ return promiseObj.then(null, function(err){ if(!err) })}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青铜峡市| 六安市| 安义县| 汉阴县| 左贡县| 三河市| 沐川县| 天气| 山阴县| 常德市| 西宁市| 当雄县| 大洼县| 吉林省| 岑溪市| 屏南县| 游戏| 阳山县| 磐安县| 寿阳县| 寿光市| 彩票| 乌兰浩特市| 漳平市| 昭通市| 虞城县| 同德县| 外汇| 丰都县| 广南县| 宜章县| 万宁市| 汪清县| 兴和县| 阿图什市| 嵩明县| 丹寨县| 万山特区| 岢岚县| 麻城市| 湾仔区|