javascript
JavaScript:学习笔记(9)——Promise对象
JavaScript:學習筆記(9)——Promise對象
引入Promise
Primose是異步編程的一種解決方案,比傳統的解決方案回調函數和事件更加合理和強大。如下面為基于回調函數的Ajax操作:
request.onreadystatechange = function () {if (request.readyState === 4) {if (request.status === 200) {return success(request.responseText);} else {return fail(request.status);}} }通過分析,我們發現回調一個很大的問題,就是層層嵌套的回調函數,當代碼量較大的時候,將難以維護。
所謂Promise,提供了另外一種鏈式的異步方案。
var ajax = ajaxGet('http://...'); ajax.ifSuccess(success).ifFail(fail);先統一執行AJAX邏輯,不關心如何處理結果,然后,根據結果是成功還是失敗,在將來的某個時候調用success函數或fail函數。古人云:“君子一諾千金”,這種“承諾將來會執行”的對象在JavaScript中稱為Promise對象。
異步操作完成后,將可以設置Promise的狀態,他有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗),一旦設置好后任何操作都無法改變這個狀態,并且任何時候都可以得到這個狀態。
?
基本用法
基本語法如下:
const promise = new Promise(function (resolve, reject) {//....some codeif(/*異步操作成功*/ )resolve(value)elsereject(error) });Promise構造函數接收一個函數作為參數,該函數的兩個參數分別是resolve、reject(由JS提供,不需要自己提供)
- resolve函數將Promise對象的狀態從“未完成”變為“成功”,在異步操作成功時調用,并將異步操作的結果,作為參數傳遞出去。
- reject函數將Promise對象的狀態從“未完成”變為“失敗”,在異步操作失敗是調用,并將異步操作的錯誤,作為參數傳遞出去。
Promise實例生成以后,可以用then方法分別指定reolved狀態和rejected狀態的回調函數。
promise.then(function(value) {// success }, function(error) {// failure });then方法可以接受兩個回調函數作為參數。第一個回調函數是Promise對象的狀態變為resolved時調用,第二個回調函數是Promise對象的狀態變為rejected時調用。其中,第二個函數是可選的,不一定要提供。這兩個函數都接受Promise對象傳出的值作為參數。
實例
const promise = new Promise((resolve, reject) => {console.log("Promise")resolve(); });promise.then(()=>{console.log("Resolve") })console.log("Hi")上面代碼中,Promise新建后立即運行,所以首先輸出的是Promise。然后,then方法指定的回調函數,將在當前腳本所有同步任務執行完才會執行,所以resolved最后輸出。
一般來說,調用resolve或reject以后,Promise 的使命就完成了,后繼操作應該放到then方法里面,而不應該直接寫在resolve或reject的后面。所以,最好在它們前面加上return語句,這樣就不會有意外。
new Promise((resolve, reject) => {return resolve(1);// 后面的語句不會執行console.log(2); })
?
轉載于:https://www.cnblogs.com/MrSaver/p/10520030.html
總結
以上是生活随笔為你收集整理的JavaScript:学习笔记(9)——Promise对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js cookie操作
- 下一篇: Spring Boot Quartz应用