日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript:学习笔记(9)——Promise对象

發布時間:2023/12/10 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。