麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

JavaScript-中的Promise使用詳解

2019-11-02 14:44:09
字體:
供稿:網(wǎng)友

   這篇文章主要介紹了JavaScript中的Promise使用詳解,promise對(duì)象是JS進(jìn)階學(xué)習(xí)中的重要知識(shí)點(diǎn),需要的朋友可以參考下

  許多的語言,為了將異步模式處理得更像平常的順序,都包含一種有趣的方案庫,它們被稱之為promises,deferreds,或者futures。JavaScript的promises ,可以促進(jìn)關(guān)注點(diǎn)分離,以代替緊密耦合的接口。 本文講的是基于Promises/A 標(biāo)準(zhǔn)的JavaScript promises。[http://wiki.commonjs.org/wiki/Promises/A]

  Promise的用例:

  執(zhí)行規(guī)則

  多個(gè)遠(yuǎn)程驗(yàn)證

  超時(shí)處理

  遠(yuǎn)程數(shù)據(jù)請(qǐng)求

  動(dòng)畫

  將事件邏輯從應(yīng)用邏輯中解耦

  消除回調(diào)函數(shù)的恐怖三角

  控制并行的異步操作

  JavaScript promise是一個(gè)承諾將在未來返回值的對(duì)象。是具有良好定義的行為的數(shù)據(jù)對(duì)象。promise有三種可能的狀態(tài):

  Pending(待定)

  Rejected(拒絕)

  Resolved(已完成)

  一個(gè)已經(jīng)拒絕或者完成的承諾屬于已經(jīng)解決的。一個(gè)承諾只能從待定狀態(tài)變成已經(jīng)解決的狀態(tài)。之后,承諾的狀態(tài)就不變了。承諾可以在它對(duì)應(yīng)的處理完成之后很久還存在。也就是說,我們可以多次取得處理結(jié)果。我們通過調(diào)用promise.then()來取得結(jié)果,這個(gè)函數(shù)一直到承諾對(duì)應(yīng)的處理結(jié)束才會(huì)返回。我們可以靈活的串聯(lián)起一堆承諾。這些串聯(lián)起來的“then”函數(shù)應(yīng)該返回一個(gè)新的承諾或者最早的那個(gè)承諾。

  通過這個(gè)樣式,我們可以像寫同步代碼一樣來寫非同步代碼。主要是通過組合承諾來實(shí)現(xiàn):

  堆棧式任務(wù):多處散落在代碼中的,對(duì)應(yīng)同一個(gè)承諾。

  并行任務(wù):多個(gè)承諾返回同一個(gè)承諾。

  串行任務(wù):一個(gè)承諾,然后接著執(zhí)行另一個(gè)承諾。

  上面幾種的組合。

  為什么要這么麻煩?只用基本的回調(diào)函數(shù)不行嗎?

  回調(diào)函數(shù)的問題

  回調(diào)函數(shù)適合簡(jiǎn)單的重復(fù)性事件,例如根據(jù)點(diǎn)擊來讓一個(gè)表單有效,或者保存一個(gè)REST調(diào)用的結(jié)果。回調(diào)函數(shù)還會(huì)使代碼形成一個(gè)鏈,一個(gè)回調(diào)函數(shù)調(diào)用一個(gè)REST函數(shù),并為REST函數(shù)設(shè)置一個(gè)新的回調(diào)函數(shù),這個(gè)新的回調(diào)函數(shù)再調(diào)用另一個(gè)REST函數(shù),依此類推。代碼的橫向增長(zhǎng)大于縱向的增長(zhǎng)。回調(diào)函數(shù)看起來很簡(jiǎn)單,直到我們需要一個(gè)結(jié)果,而且是立刻就要,馬上就用在下一行的計(jì)算中。

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 'use strict'; var i = 0; function log(data) {console.log('%d %s', ++i, data); };   function validate() { log("Wait for it ..."); // Sequence of four Long-running async activities setTimeout(function () { log('result first'); setTimeout(function () { log('result second'); setTimeout(function () { log('result third'); setTimeout(function () { log('result fourth') }, 1000); }, 1000); }, 1000); }, 1000);   }; validate();

  我使用timeout來模擬異步操作。管理異常的方法是痛苦的,很容易玩漏下游行為。當(dāng)我們編寫回調(diào),那么代碼組織變得混亂。圖2顯示了一個(gè)模擬驗(yàn)證流可以運(yùn)行在NodeJS REPL。在下一節(jié),我們將從pyramid-of-doom模式遷移到一個(gè)連續(xù)的promise。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人精品久久 | 玖玖视频精品 | 婷婷中文字幕一区二区三区 | 亚洲综合视频一区 | 久久久久久艹 | 日本免费不卡一区二区 | vidz 98hd| 久久久资源网 | 成人激情在线观看 | 欧美性a视频 | 日韩视频网址 | 欧美日日操| 久久久av亚洲男天堂 | 夜夜看 | 自拍亚洲伦理 | 国产三级国产精品国产普男人 | 久久免费精品视频 | 欧美一区二区三区免费观看 | 91精品国产日韩91久久久久久360 | 石原莉奈日韩一区二区三区 | 国产成人高潮免费观看精品 | 国产精品18久久久久久久久 | 久久久久91视频 | 一级做a爱片性色毛片高清 日本一区二区在线看 | 国产精品亚洲三区 | 久草导航 | 青青操国产 | 日本在线观看一区二区 | 欧美日韩色 | 亚洲一区二区三区四区精品 | 久久日韩在线 | 久久精品久久精品国产大片 | 羞羞羞羞视频 | 中文日韩字幕 | 视频一区二区三区中文字幕 | 国产精品视频久久久 | 久久精品99国产国产精 | 免费观看黄色一级视频 | 国产91在线免费 | 午夜电影视频 | 国产91porn |