亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS中Promise函數then的奧秘探究

2019-11-19 13:23:35
字體:
來源:轉載
供稿:網友

Promise概述

Promise對象是CommonJS工作組提出的一種規范,目的是為異步操作提供統一接口。

那么,什么是Promises?

首先,它是一個對象,也就是說與其他JavaScript對象的用法,沒有什么兩樣;其次,它起到代理作用(proxy),充當異步操作與回調函數之間的中介。它使得異步操作具備同步操作的接口,使得程序具備正常的同步運行的流程,回調函數不必再一層層嵌套。

簡單說,它的思想是,每一個異步任務立刻返回一個Promise對象,由于是立刻返回,所以可以采用同步操作的流程。這個Promises對象有一個then方法,允許指定回調函數,在異步任務完成后調用。

Promise的then方法可以接受前一個函數的執行結果,還可以保證另一個Promise的順序執行,這到底是怎么做到的呢?

原理圖(先上圖)

問題需求

如何保證多個 promise 順序執行?

實例:

var f1 = function (){ return new Promise(function (resolve, reject){  setTimeout(function (){   console.log("f1 ok!")   resolve("f1 ok!");  }, 1000) });}var f2 = function (){ return new Promise(function (resolve, reject){  setTimeout(function (){   console.log("f2 ok!")   resolve("f2 ok!");  }, 3000) });}var f3 = function (){ return new Promise(function (resolve, reject){  setTimeout(function (){   console.log("f3 ok!")   resolve("f3 ok!");  }, 2000) });}

當然如果要并行的話,我們很容易想到 Promise.all 方法:

Promise.all([f1(), f2(), f3()]).then(function (data){ console.log(data)})// f1 ok! // f3 ok! // f2 ok! // ["f1 ok!", "f2 ok!", "f3 ok!"]

如果要順序執行:

f1().then(f2).then(f3)// f1 ok!// f2 ok!// f3 ok!//或者這樣function f(all) { var promise = Promise.resolve(); all.forEach((p, index) => {  promise = promise.then(p) })}f([f1, f2, f3])

那么問題來了,then是如何做到順序執行的呢,參數既可以是一個普通函數,也可是是一個返回promise的函數?

then的奧秘

很多實現promise的庫都比較復雜,如果自己實現的話,可以借鑒下面簡單的代碼:

Promise.prototype.then = function(onFulfilled, onRejected) { var promise = this; return new Promise(function(resolve, reject) {  function handle(value) {   var ret = typeof onFulfilled === 'function' && onFulfilled(value) || value;   if (ret && typeof ret['then'] == 'function') {    ret.then(function(value) {     resolve(value);    }, function(reason) {     reject(reason);    });   } else {    resolve(ret);   }  }  function errback(reason) {   reason = typeof onRejected === 'function' && onRejected(reason) || reason;   reject(reason);  }  if (promise._status === 'PENDING') {   promise._resolves.push(handle);   promise._rejects.push(errback);  } else if (promise._status === FULFILLED) {    callback(promise._value);  } else if (promise._status === REJECTED) {   errback(promise._reason);  } });}

重點在then的實現,看上述代碼,每個then返回的是什么,是一個新的 Promise,一個新的 Promise,一個新的 Promise
第二個重點是,在內部又處理了一個 回調函數運行結果是 一個 promise的 判斷,如果是那么等待這個promise運行結束才調用 resolve 更改狀態,關鍵是resolve的調用時機,resolve的調用時機,才能夠往下執行,這兩步就是then函數的關鍵。
是不是 有點暈,請看最開始的圖。

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品入口日韩视频大尺度| 亚洲精品美女在线观看| 国产精品电影久久久久电影网| 欧美日韩激情视频8区| 日韩精品有码在线观看| 久久精品91久久香蕉加勒比| 国产日本欧美一区二区三区| 美女性感视频久久久| 日本人成精品视频在线| 欧美在线免费观看| 欧美亚洲国产成人精品| 精品日本高清在线播放| 亚洲福利视频二区| 午夜精品一区二区三区在线视| 亚洲欧美激情在线视频| 日韩精品免费在线| 日产精品99久久久久久| 国产成+人+综合+亚洲欧美丁香花| 91黑丝在线观看| 亚洲欧美在线x视频| 久久成人精品视频| 国产日产欧美a一级在线| 日韩欧美在线视频日韩欧美在线视频| 欧美日韩国产综合新一区| 亚洲综合色av| 91精品国产一区| 日韩国产精品亚洲а∨天堂免| 国模极品一区二区三区| 久久久女人电视剧免费播放下载| 国产精品美女久久久免费| 欧美性猛交xxxx免费看久久久| 久久久国产精彩视频美女艺术照福利| 久久精品国产久精国产一老狼| 伊人久久免费视频| 最近2019中文免费高清视频观看www99| 亚洲欧美视频在线| 亚洲国产精彩中文乱码av在线播放| 国产一区二区三区视频| 狠狠色噜噜狠狠狠狠97| 97视频在线免费观看| 大荫蒂欧美视频另类xxxx| 亚洲成人久久久久| 日本欧美一级片| 亚洲淫片在线视频| 国产日韩综合一区二区性色av| 日韩美女主播视频| 精品久久久久国产| 1769国内精品视频在线播放| 日韩欧美国产骚| 国产主播喷水一区二区| 国产精品久久久久久久久借妻| 精品国产一区二区三区久久狼黑人| 亚洲午夜av电影| 欧美一级视频免费在线观看| 亚洲欧美中文日韩在线v日本| 国产成人av网| 欧美成人精品h版在线观看| 92福利视频午夜1000合集在线观看| 国产精品99久久久久久www| 国产主播欧美精品| 精品欧美aⅴ在线网站| 欧美日韩一区二区免费在线观看| 国产欧美精品一区二区三区介绍| 欧美精品一区二区免费| 亚洲精品久久久久中文字幕欢迎你| 97久久久免费福利网址| 国产69久久精品成人| 色琪琪综合男人的天堂aⅴ视频| 亚洲免费av网址| 国产精品第10页| 久久久女人电视剧免费播放下载| 日韩欧美主播在线| 亚洲男人天堂久| 国产欧美婷婷中文| 欧美日本亚洲视频| 亚洲一区二区三区四区视频| 欧美成年人视频网站| 欧美午夜宅男影院在线观看| 成人性生交xxxxx网站| 国内精品400部情侣激情| 色综合久久久久久中文网| 日韩视频在线免费观看| 色综合影院在线| 亚洲va电影大全| 国产精品免费久久久久久| 亚洲视频在线看| 欧美国产精品人人做人人爱| 热久久视久久精品18亚洲精品| 久久人91精品久久久久久不卡| 97人洗澡人人免费公开视频碰碰碰| 欧美一区二区三区图| 成人免费直播live| 欧美一级免费视频| 欧美影院在线播放| 欧美午夜无遮挡| 成人av番号网| 91精品视频播放| 国产福利精品视频| 国产精品视频大全| 日韩免费不卡av| 九九视频这里只有精品| 揄拍成人国产精品视频| 日韩风俗一区 二区| 精品久久久久久久久中文字幕| 精品少妇v888av| 亚洲精品91美女久久久久久久| 亚洲免费电影在线观看| 欧美成aaa人片在线观看蜜臀| 亚洲免费高清视频| 欧美午夜xxx| 国产日韩精品在线| 亚洲视频精品在线| 国产噜噜噜噜久久久久久久久| 欧美日韩亚洲激情| 69**夜色精品国产69乱| 日韩在线视频二区| 97在线观看视频国产| 亚洲精品日韩久久久| 欧美在线视频免费播放| 久久免费视频网| 久久影院在线观看| 亚洲成av人影院在线观看| 亚洲精品国产精品国自产观看浪潮| 欧美福利视频在线观看| 久久影院中文字幕| 高清欧美性猛交xxxx| 亚洲成人a**站| 日本成人精品在线| 欧美大片免费观看在线观看网站推荐| 欧美在线一区二区三区四| 欧美华人在线视频| 欧美精品激情blacked18| 中文字幕日韩欧美精品在线观看| 亚洲二区在线播放视频| 蜜臀久久99精品久久久久久宅男| 成人激情视频在线观看| 日韩最新在线视频| 欧美极品美女电影一区| 中国人与牲禽动交精品| 在线成人免费网站| 亚洲国产欧美久久| 欧美日韩国产色视频| 久久久久久久999精品视频| 国产va免费精品高清在线| 欧美在线免费观看| 在线精品高清中文字幕| 岛国av午夜精品| 欧美大片欧美激情性色a∨久久| 国产精品亚洲自拍| 久久精品99久久久久久久久| 欧美在线观看日本一区| 色综合色综合网色综合| 日韩欧美在线视频观看| 在线精品视频视频中文字幕| 欧美一级成年大片在线观看| 欧美精品亚州精品| 日韩在线观看精品| 欧美亚洲伦理www| 国内精久久久久久久久久人| 日韩欧美中文字幕在线播放| 97精品国产97久久久久久春色| 亚洲欧美三级在线| 久久久精品免费| 欧美激情精品久久久|