Promise鏈式調用和解決回調地獄的ES7終極解決方法async,await

promise鏈式調用

**then 是成功回調,只要在then后邊return一個promise就可以繼續then**<script type="text/javascript">let p1=new Promise(function(resolve,reject){setTimeout(function(){resolve()//成功回調// reject()//失敗回調},2000)//2秒后執行后邊的then、catch函數})p1.then(function(res){console.log("成功執行then"+res)// 在準備第二個promise對象let p2=new Promise(function(resolve,reject){setTimeout(function(){resolve()},1000)})return p2}).then(function(){console.log("我是p1 then后邊的第二個then")})p.catch(function(){console.log("失敗執行catch")})</script>

解決回調地獄的終極方法 async/await ES7的語法,可以通過 async/await讓代碼看起來像同步的

async異步 await等待
await 等待 就是當后面跟的是promise對象,就讓他停止 ,先讓里面的異步事情做完,在把結果返回給前面的新變量,在繼續向后執行
他只生效當前作用域內部,也就是async函數內部。
pGetSend 是一個異步的ajax請求
await會等待這個異步函數請求結束,并把結果給前面的res變量以后,在向后執行代碼。

async/await 語法
async/await 是es7的新增語法,是為promise設計的語法。
是回調地獄的終極解決方案,就是用async/await語法把–異步代碼寫的看起來像同步的代碼。
?

 語法規范:1 async關鍵字寫在--函數的前面,就把該函數變成了一個異步函數2 await是一個寫在 異步函數里面的關鍵字3 await關鍵字后面的必須是一個promise對象滿足以上三個條件,就可以把本該在promise的then回調里面接受的結果 ,放在await關鍵字前面定義一個變量來接受了。 
**語法: async 必須寫在函數前邊await 關鍵字 后邊必須跟著Promise對象async function fn(){}****<!-- 語法兼容可以借助babel 直接百度即可 -->**<script type="text/javascript">function pGetSend(url){let p=new Promise(function(resolve,reject){let xhr=new XMLHttpRequest()xhr.open('get',url)xhr.onload=function(){resolve(xhr.responseText)}xhr.send()})return p}async function fn(){// 1請求1 let res =await pGetSend("url.php")let result=JSON.parse(res)console.log("1"+res)// 2 次let res2=await pGetSend("url.php?key=value&key1=vlaue1")let result2=JSON.parse(res2)console.log("2"+res2)}fn ()</script>

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247379.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247379.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247379.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1.MySQL目錄結構

分為兩個目錄&#xff1a; 1.安裝目錄&#xff1a; 2.數據目錄&#xff1a; 在Linux下 yum安裝mysql后使用 find / -name my.cnf 找到mysql數據文件的位置 轉載于:https://www.cnblogs.com/sdrbg/p/11237231.html

對promise.all底層的實現的研究

1.Promise.all(iterable)返回一個新的Promise實例,此實例在iterable參數內素有的Promise都fulfilled或者參數中不包含Promise時&#xff0c;狀態變成fulfilled。 如果參數中Promise有一個失敗rejected &#xff0c;此實例回調失敗&#xff0c;失敗原因的是第一個失敗Promise的返…

vue-provide/inject輕松實現跨級訪問祖先組件

provide&#xff1a;Object | () > Object inject&#xff1a;Array<string> | { [key: string]: string | Symbol | Object } provide 和 inject 主要為高階插件/組件庫提供用例。并不推薦直接用于應用程序代碼中。是2.2.0版本 新增的。 這對選項需要一起使用&#x…

python 操作redis,存取為字節格式,避免轉碼加

這種情況連接數據庫&#xff0c;對數據的存取都是字節類型&#xff0c;存取時還得轉碼一下 from redis import Redis# 實例化redis對象rdb Redis(hostlocalhost, port6379, db0,passwordaaa123) rdb.set(name, root) name rdb.get(name) print(name)為了避免上述情況&#x…

element ui table scrollTop 滾動到行頭或行尾

1.設置table的ref為tableList2.設置滾動至頂部this.$refs.tableList.bodyWrapper.scrollTop 0;3.設置滾動至底部this.$refs.tableList.bodyWrapper.scrollTop this.$refs.tableList.bodyWrapper.scrollHeight;//如果請求完更新數據&#xff0c;需要使用$nextTick this.$nextTic…

Element-UI中Drawer抽屜去除標題自帶藍色框

當點擊事件drawertrue時&#xff0c;抽匣回打開 這時抽匣的標題會出現一個難看的藍色邊框&#xff0c;一會就會消失&#xff0c;但是好丑&#xff0c;所以要去掉它 解決方法 /deep/ :focus {outline: 0;} vue組件中&#xff0c;在style設置為scoped的時候&#xff0c;里面在…

Java生鮮電商平臺-B2B生鮮的互聯網思維

Java生鮮電商平臺-B2B生鮮的互聯網思維 在互聯網高速發展的今天&#xff0c;為我們的生活帶來了眾多便利。然而互聯網從早期的萌芽狀態到現在婦孺皆知&#xff0c;它的崛起速度遠遠超乎世人的想象。人們開始關注互聯網并且研究它&#xff0c;而思維模式的研究則是從深層次研究事…

Java生鮮電商平臺-高并發核心技術訂單與庫存實戰

Java生鮮電商平臺-高并發核心技術訂單與庫存實戰 一、 問題 一件商品只有100個庫存&#xff0c;現在有1000或者更多的用戶來購買&#xff0c;每個用戶計劃同時購買1個到幾個不等商品。 如何保證庫存在高并發的場景下是安全的&#xff1f; &#xff08;1&#xff09;不多發 &…

Vue2 MVVM 雙向綁定(數據劫持+發布者-訂閱者模式)

參考文獻&#xff1a;https://www.cnblogs.com/libin-1/p/6893712.html https://juejin.im/post/5b2f0769e51d45589f46949e MVVM拆開來即為Model-View-ViewModel&#xff0c;有View&#xff0c;ViewModel&#xff0c;Model三部分組成。View層代表的是視圖、模版&#xff0c;負…

常用的激活函數

1.階躍函數 &#xff0c;值域{0,1} 1 def step_function(x): 2 return np.array(x>0,dtypenp.int) 2.sigmoid函數 &#xff0c;值域(0,1) 1 def sigmoid(x): 2 return 1/(1np.exp(-x)) 3.relu函數 &#xff0c;值域[0&#xff0c;∞&#xff09; 1 def relu(x): 2 …

前端優化-vue-cli4安裝webpack-bundle-analyzer分析包文件

使用vue-cli3創建了一個工程目錄&#xff0c;技術棧為vue-cli3vue-routervuexelement-uiv-chartsaxios。但是等到項目開發完后&#xff0c;發現生成的app.js特別大&#xff0c;接近10M。為了優化項目性能&#xff0c;需要使用webpack-bundle-analyzer分析包文件&#xff0c;找出…

今天剛查到的宏,學習

PVP常用的宏&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&…

不要再問我三次握手和四次揮手

三次握手和四次揮手是各個公司常見的考點&#xff0c;也具有一定的水平區分度&#xff0c;也被一些面試官作為熱身題。很多小伙伴說這個問題剛開始回答的挺好&#xff0c;但是后面越回答越冒冷汗&#xff0c;最后就歇菜了。 見過比較典型的面試場景是這樣的: 面試官&#xff1…

Apache ServiceComb

Apache ServiceComb 開源&#xff0c;全棧微服務解決方案。開箱即用&#xff0c;高性能&#xff0c;兼容流行的生態&#xff0c;多語言支持 ServiceComb是一個微服務框架&#xff0c;提供服務注冊&#xff0c;發現&#xff0c;配置和管理實用程序。 下載 &#xff1a;http://se…

VScode PowerShell運行腳本報錯禁止運行腳本解決方式圖文

今天在新Windows電腦上用VScode的終端PowerShell運行一個腳本的時候&#xff0c; 錯誤 在vscode終端運行vue -V查看版本失敗 PS C:\Users\11388> vue -V vue : 無法加載文件 E:\NodeJs\node_global\vue.ps1&#xff0c;因為在此系統上禁止運行腳本。有關詳細信息&#xf…

多線程的創建方式---繼承Thread和實現Runnable

繼承Thread類創建多線程 1 package cn.ftf.thread;2 /**3 * 多線程實現方式一 繼承Thread實現多線程&#xff0c;繼承Thread&#xff0c;重寫run方法4 * author 房廷飛5 *6 */7 public class StartThread extends Thread{ //對象繼承Thread8 public static void mai…

添加右鍵用Sublime Text3 打開文件和文件夾

最近重新裝了一下系統&#xff0c;右鍵沒有用Sublime Text 3打開的選項了&#xff0c;于是查了一下解決方案 1、環境 Win10和Win7都可以Sublime Text 3最新版本以下為Win10系統下截圖 2、添加右鍵打開文件 Win R&#xff0c;輸入regedit,打開注冊表 找到HKEY_CLASSESS_ROOT…

Windows Mobile Widget Emulator

今天Vimpyboy 在codeplex發布了Windows Mobile Widget Emulator。這是一個用來調試Windows Mobile 6.5 Widget的工具&#xff0c;我在做Windows Mobile 6.5 新功能widget開發 的時候就發現調試Widget很麻煩。也有想法做一個Emulator&#xff0c;其實這個Emulator目標很明顯&…

JS 常用字符串數組遍歷函數方法整理

目錄 一、concat() 二、join() 三、push() 四、pop() 五、shift() 六、unshift() 七、slice() 九、substring() 和 substr() 十、sort 排序 十一、reverse() 十二、indexOf 和 lastIndexOf 十三、every 十四、some 十五、filter 十六、map ES6新增新操作數組的…

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

忘記網址了…… 問題&#xff1a; 分析思路與解決方法&#xff1a; 轉載于:https://www.cnblogs.com/bravesunforever/p/11247988.html