您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關JavaScript中Promise函數的作用是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
問題需求
如何保證多個 promise 順序執(zhí)行?
實例:
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!"]
如果要順序執(zhí)行:
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是如何做到順序執(zhí)行的呢,參數既可以是一個普通函數,也可是是一個返回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); } }); }
看完上述內容,你們對JavaScript中Promise函數的作用是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。