亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關于promise和async用法以及區(qū)別詳解

 更新時間:2023年01月10日 10:26:06   作者:suoh's?Blog  
Promise是一個構造函數,我們就可以new Promise()得到一個 Promise的實例,下面這篇文章主要給大家介紹了關于promise和async用法以及區(qū)別的相關資料,需要的朋友可以參考下

一、promise promise的概念

Promise 是異步編程的一種解決方案,是一個構造函數,自身有all、reject、resolve方法,原型上有then、catch等方法。

特點:

  • 對象的狀態(tài)不受外界影響。Promise對象代表一個異步操作,有三種狀態(tài):pending(進行中)、fulfilled(已成功)和rejected(已失?。?/li>
  • 一旦狀態(tài)改變,就不會再變,任何時候都可以得到這個結果。Promise對象的狀態(tài)改變,只有兩種可能:從pending變?yōu)閒ulfilled和從pending變?yōu)閞ejected。

一句話總結:就是用來解決地域回調問題(地域回調--回調函數里面嵌套回調函數)

promise使用方法

用法一:Promise構造函數接受一個函數作為參數,該函數的兩個參數分別是resolve和reject。它們是兩個函數,由JavaScript引擎提供。

resolve函數的作用是,將Promise對象的狀態(tài)從“未完成”變?yōu)?ldquo;成功”(即從Pending變?yōu)镽esolved),在異步操作成功時調用,并將異步操作的結果作為參數傳遞出去。

reject函數的作用是,將Promise對象的狀態(tài)從“未完成”變?yōu)?ldquo;失敗”(即從Pending變?yōu)镽ejected),在異步操作失敗時調用,并將異步操作報出的錯誤作為參數傳遞出去。

用法二:Promise.resolve() 和 Promise.reject() 可以直接被調用。有時候,當判斷出 promise 并不需要真正執(zhí)行時,我們并不需要 使用 new 創(chuàng)建 Promise 對象,而是可以直接調用 Promise.resolve() 和 Promise.reject()。

地獄回調的例子

回調地獄是為了讓我們代碼執(zhí)行順序的一種操作(解決異步),但是它會使我們的可讀性非常差。

//地獄回調
setTimeout(function () { //第一層
      console.log('小鎖'); //等3秒打印張三在執(zhí)行下一個回調函數
      setTimeout(function () { //第二層
            console.log('李四'); //等2秒打印李四在執(zhí)行下一個回調函數
            setTimeout(function () { //第三層
                  console.log('王五'); //等一秒打印王五
            }, 1000)
      }, 2000)
}, 3000)

promise解決地域回調

function resolveCallback(name, flag = true) {
      return new Promise((resolve, reject) => {
            // 處理異步任務
            setTimeout(() => {
                  if (flag) {
                        resolve(name)
                  } else {
                        reject('失敗')
                  }
            }, 1000)
      }, )
}
resolveCallback('張三').then(res => {
      console.log(res)
      return resolveCallback('李四')
}).then(res => {
      console.log(res)
      return resolveCallback('王五')
}).then(res => {
      console.log(res)
}).catch(res => { //捕捉失敗的回調結果
      console.log(res)
})

Promise.all()方法

Promise.all([ .. ]) 接受一個或多個值的數組(比如,立即值、promise、thenable)。它返回一個promise。

如果所有的值都完成,這個promise 的結果是完成;

一旦它們中的某一個被拒絕,那么這個promise 就立即被拒絕。

let p1 = resolveCallback('張三')
let p2 = resolveCallback('李四')
let p3 = resolveCallback('王五')
let p = Promise.all([p1,p2,p3]).then(res=>{
      console.log(res)
}).catch(res=>{
      console.log('失敗')
})

Promise.race 方法

Promise.race() 函數返回一個 Promise,它將與第一個傳遞的 promise 相同的完成方式被完成。它可以是完成( resolves),也可以是失敗(rejects),這要取決于第一個完成的方式是兩個中的哪個。

let p1 = resolveCallback('張三', 2)
let p2 = resolveCallback('李四', 3)
let p3 = resolveCallback('王五', 1)
let p = Promise.race([p1, p2, p3]).then(res => {
      console.log(res)
}).catch(res => {
      console.log('失敗')
})

二、async async的概念

Async/Await 代碼看起來簡潔一些,使得異步代碼看起來像同步代碼

async函數一定會返回一個promise對象。如果一個async函數的返回值看起來不是promise,那么它將會被隱式地包裝在一個promise中。

sync await是基于Promise實現的,可以說是改良版的Promise,它不能用于普通的回調函數。

async 函數中 return 值如何接收?

方式一:通過 promise.then形參獲取

方式二:接受函數返回值的方式是 await

await的作用

await關鍵字的作用 就是獲取 Promise中返回的內容, 獲取的是Promise函數中resolve或者reject的值(await 作用是獲取promise.[[promiseValue]]的值)

關于await的注意點

(1)await 必須寫在 async 中

(2)await 后是一個promise實例對象

三、為什么async/await更好?

  • 使用async函數可以讓代碼簡潔很多
  • 不需要像Promise一樣需要then
  • 不需要寫匿名函數處理Promise的resolve的值
  • 也不需要定義多余的data變量,還避免了嵌套代碼

總結

到此這篇關于關于promise和async用法以及區(qū)別的文章就介紹到這了,更多相關promise和async用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • js實現將選中內容分享到新浪或騰訊微博

    js實現將選中內容分享到新浪或騰訊微博

    這篇文章主要介紹了js實現將選中內容分享到新浪或騰訊微博,需要的朋友可以參考下
    2015-12-12
  • js includes方法的使用小結

    js includes方法的使用小結

    JavaScript中的數組includes()方法用于判斷數組中是否包含指定的元素,并返回一個布爾值,這篇文章主要介紹了js includes方法的使用,需要的朋友可以參考下
    2024-01-01
  • 詳解extract-text-webpack-plugin 的使用及安裝

    詳解extract-text-webpack-plugin 的使用及安裝

    這篇文章主要介紹了詳解extract-text-webpack-plugin 的使用及安裝,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 微信小程序自定義tabbar欄實現過程講解

    微信小程序自定義tabbar欄實現過程講解

    tabBar相對而言用的還是比較多的,但是用起來并沒有難,下面這篇文章主要給大家介紹了關于微信小程序全局配置之tabBar的相關資料,文中通過圖文以及示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • 基于JavaScript實現回到頁面頂部動畫代碼

    基于JavaScript實現回到頁面頂部動畫代碼

    這篇文章主要介紹了基于JavaScript實現回到頁面頂部動畫代碼的相關資料,代碼簡單易用,非常實用,需要的朋友可以參考下
    2016-05-05
  • JS中利用swiper實現3d翻轉幻燈片實例代碼

    JS中利用swiper實現3d翻轉幻燈片實例代碼

    大家都知道Swiper(Swiper master)是目前應用較廣泛的移動端網頁觸摸內容滑動js插件。下面這篇文章主要給大家介紹了在JS中利用swiper實現3d翻轉幻燈片的相關資料,文中給出了完整的示例代碼供大家參考學習,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • layui 表格操作列按鈕動態(tài)顯示的實現方法

    layui 表格操作列按鈕動態(tài)顯示的實現方法

    今天小編就為大家分享一篇layui 表格操作列按鈕動態(tài)顯示的實現方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 簡單聊聊JavaScript的事件循環(huán)機制

    簡單聊聊JavaScript的事件循環(huán)機制

    前端開發(fā)的童鞋應該都知道,JavaScript是一門單線程的腳本語言,這就意味著JavaScript 代碼在執(zhí)行的時候,只有一個主線程來執(zhí)行所有的任務,同一個時間只能做同一件事情,這篇文章主要給大家介紹了關于JavaScript事件循環(huán)機制的相關資料,需要的朋友可以參考下
    2022-03-03
  • javascript顯示選擇目錄對話框的代碼

    javascript顯示選擇目錄對話框的代碼

    js 目錄對話框顯示代碼
    2008-11-11
  • 利用js實現遮罩以及彈出可移動登錄窗口

    利用js實現遮罩以及彈出可移動登錄窗口

    本篇文章是對使用js實現遮罩以及彈出可移動登錄窗口的實現方法進行了詳細的分析介紹,需要的朋友參考下
    2013-07-07

最新評論