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

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 16:04:59
字體:
來源:轉載
供稿:網友

前言

Promise是JavaScript異步操作解決方案,最近看到項目里不少人用了Promise 的庫類,比如 bluebird、q 、jQuery.Deffered 等 polyfill 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) })}

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 古田县| 仁化县| 静安区| 航空| 扬州市| 房产| 湘潭市| 安康市| 永泰县| 汕尾市| 江安县| 嘉峪关市| 内黄县| 龙山县| 临桂县| 利川市| 十堰市| 三门县| 营口市| 隆尧县| 长阳| 东兰县| 周至县| 抚州市| 堆龙德庆县| 高雄市| 英山县| 江北区| 德阳市| 白水县| 砚山县| 彰化市| 大姚县| 邹城市| 盐亭县| 务川| 四子王旗| 聂荣县| 乳源| 张北县| 镇安县|