JavaScript中?Promise?的使用技巧
“生產代碼”是可能需要一些時間來執(zhí)行的代碼。
“消費代碼”是必須等待結果的代碼。
Promise 是一個 JavaScript 對象,它鏈接生產代碼和消費代碼。
看一段最簡單的代碼:
let myPromise = new Promise(function(myResolve, myReject) { // "Producing Code" (May take some time) myResolve(); // when successful myReject(); // when error }); // "Consuming Code" (Must wait for a fulfilled Promise) myPromise.then( function(value) { /* code if successful */ }, function(error) { /* code if some error */ } );
執(zhí)行 new Promise 的構造函數后,會立即進入 Promise 的構造函數體內,即包含了 resolve 和 reject 方法的匿名函數。
然后執(zhí)行完畢。此時并不會執(zhí)行 then 里的回調函數。
然后 then 指定的回調函數被異步
調用,注意 Chrome 里的提示:
- 當 Promise 對象處于
pending
(工作)狀態(tài)時,結果是未定義的。 - 當 Promise 對象
fulfilled
時,結果是一個值。如下圖所示:
- 當 Promise 對象被
rejected
時,結果是一個錯誤對象。
開發(fā)人員無法訪問 Promise 屬性狀態(tài)和結果,必須使用 Promise 方法來處理 Promise。
看一個包含 UI 的例子:
Promise 把異步代碼封裝起來。上圖的 setTimeout,模擬了一個耗時 3 秒的 HTTP 操作。
返回的 myPromise 對象,使用 then 注冊回調函數?;卣{函數不關心自己什么時候被調用。
運行顯示:
3 秒后:
一個文件訪問的例子:
let myPromise = new Promise(function(myResolve, myReject) { let req = new XMLHttpRequest(); req.open('GET', "mycar.htm"); req.onload = function() { if (req.status == 200) { myResolve(req.response); } else { myReject("File not Found"); } }; req.send(); }); myPromise.then( function(value) {myDisplayer(value);}, function(error) {myDisplayer(error);} );
函數體內一般是一個比較費時的操作,操作本身會立即執(zhí)行,但什么時候執(zhí)行結束?這就是一個異步操作了。執(zhí)行結束后,通過 resolve 通知 then 注冊的回調函數。
到此這篇關于JavaScript Promise 的使用技巧的文章就介紹到這了,更多相關JavaScript Promise 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript日期工具類DateUtils定義與用法示例
這篇文章主要介紹了JavaScript日期工具類DateUtils定義與用法,涉及javascript針對日期時間的獲取、轉換、比較、運算等相關操作技巧,需要的朋友可以參考下2018-09-09JS實現的倒計時恢復按鈕點擊功能【可用于協(xié)議閱讀倒計時】
這篇文章主要介紹了JS實現的倒計時恢復按鈕點擊功能,可用于協(xié)議閱讀倒計時,涉及javascript基于setInterval的時間定時觸發(fā)相關操作技巧,需要的朋友可以參考下2018-04-04