真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何理解JavaScript中的Promise-創(chuàng)新互聯(lián)

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的延慶網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

如何理解JavaScript中的Promise,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

promise 是一個(gè) ES6 的語(yǔ)法

Promise表示承諾的意思,它在語(yǔ)法上解決了傳統(tǒng)的多層回調(diào)嵌套問(wèn)題

回調(diào)函數(shù)

· 什么是回調(diào)函數(shù)?

· 就是把函數(shù) A 當(dāng)作參數(shù)傳遞到 函數(shù) B 中

· 在函數(shù) B 中以行參的方式進(jìn)行調(diào)用

function a(cb) {

    cb()}function b() {

    console.log('我是函數(shù) b')}a(b)

· 為什么需要回調(diào)函數(shù)

· 當(dāng)我們執(zhí)行一個(gè)異步的行為的時(shí)候,我們需要在一個(gè)異步行為執(zhí)行完畢之后做一些事情

· 那么,我們是沒(méi)有辦法提前預(yù)知這個(gè)異步行為是什么時(shí)候完成的

· 我們就只能以回調(diào)函數(shù)的形式來(lái)進(jìn)行

一個(gè)典型的定時(shí)器

setTimeout(function(){

    console.log("回調(diào)函數(shù)執(zhí)行了")}, 2000)

回調(diào)地獄

· 當(dāng)一個(gè)回調(diào)函數(shù)嵌套一個(gè)回調(diào)函數(shù)的時(shí)候

· 就會(huì)出現(xiàn)一個(gè)嵌套結(jié)構(gòu)

· 當(dāng)嵌套的多了就會(huì)出現(xiàn)回調(diào)地獄的情況

· 比如我們發(fā)送三個(gè) ajax 請(qǐng)求

· 第一個(gè)正常發(fā)送

· 第二個(gè)請(qǐng)求需要第一個(gè)請(qǐng)求的結(jié)果中的某一個(gè)值作為參數(shù)

· 第三個(gè)請(qǐng)求需要第二個(gè)請(qǐng)求的結(jié)果中的某一個(gè)值作為參數(shù)

ajax({

  url: '我是第一個(gè)請(qǐng)求',

  success (res) {

    // 現(xiàn)在發(fā)送第二個(gè)請(qǐng)求    ajax({

      url: '我是第二個(gè)請(qǐng)求',

      data: { a: res.a, b: res.b },

      success (res2) {

        // 進(jìn)行第三個(gè)請(qǐng)求        ajax({

          url: '我是第三個(gè)請(qǐng)求',

          data: { a: res2.a, b: res2.b },

   success (res3) { 

            console.log(res3) 

          }

        })

      }

    })

  }})

· 回調(diào)地獄,其實(shí)就是回調(diào)函數(shù)嵌套過(guò)多導(dǎo)致的

· 當(dāng)代碼成為這個(gè)結(jié)構(gòu)以后,已經(jīng)沒(méi)有維護(hù)的可能了

· 所以我們要把代碼寫(xiě)的更加的藝術(shù)一些

PROMISE

· 為了解決回調(diào)地獄

· 我們就要使用 promise 語(yǔ)法

· 語(yǔ)法:

new Promise(function (resolve, reject) {

    // resolve 表示成功的回調(diào)    // reject 表示失敗的回調(diào)}).then(function (res) {

    // 成功的函數(shù)}).catch(function (err) {

    // 失敗的函數(shù)})

· promise 就是一個(gè)語(yǔ)法

· 我們的每一個(gè)異步事件,在執(zhí)行的時(shí)候

· 都會(huì)有三個(gè)狀態(tài),執(zhí)行中 / 成功 / 失敗

· 因?yàn)樗顺晒Φ幕卣{(diào)函數(shù)

· 所以我們就可以使用 promise 來(lái)解決多個(gè) ajax 發(fā)送的問(wèn)題

new Promise(function (resolve, reject) {

    ajax({

        url: '第一個(gè)請(qǐng)求',

        success (res) {

            resolve(res)

        }

    })}).then(function (res) {

    // 準(zhǔn)備發(fā)送第二個(gè)請(qǐng)求    return new Promise(function (resolve, reject) {

        ajax({

            url: '第二個(gè)請(qǐng)求',

            data: { a: res.a, b: res.b },

            success (res) {

                resolve(res)

            }

        })

    })}).then(function (res) {

    ajax({

        url: '第三個(gè)請(qǐng)求',

        data: { a: res.a, b: res.b },

        success (res) {

            console.log(res)

        }

    })})

· 這個(gè)時(shí)候,我們的代碼已經(jīng)改觀(guān)了很多了

· 基本已經(jīng)可以維護(hù)了

· 但是對(duì)于一個(gè)程序員來(lái)說(shuō),這個(gè)樣子是不夠的

· 我們還需要更加的簡(jiǎn)化代碼

· 所以我們就需要用到一個(gè) es7 的語(yǔ)法了

· 叫做 async/await

ASYNC/AWAIT

· async/await 是一個(gè) es7 的語(yǔ)法

· 這個(gè)語(yǔ)法是 回調(diào)地獄的終極解決方案

· 語(yǔ)法:

async function fn() {

    const res = await promise對(duì)象}

· 這個(gè)是一個(gè)特殊的函數(shù)方式

· 可以 await 一個(gè) promise 對(duì)象

· 可以把異步代碼寫(xiě)的看起來(lái)像同步代碼

· 只要是一個(gè) promiser 對(duì)象,那么我們就可以使用 async/await 來(lái)書(shū)寫(xiě)

async function fn() {

  const res = new Promise(function (resolve, reject) {

    ajax({

        url: '第一個(gè)地址',

        success (res) {

            resolve(res)

        }

    })

  })

  // res 就可以得到請(qǐng)求的結(jié)果  const res2 = new Promise(function (resolve, reject) {

    ajax({

        url: '第二個(gè)地址',

        data: { a: res.a, b: res.b },

        success (res) {

            resolve(res)

        }

    })

  })

  const res3 = new Promise(function (resolve, reject) {

    ajax({

      url: '第三個(gè)地址',

      data: { a: res2.a, b: res2.b },

      success (res) {

        resolve(res)

      }

    })

  })

  // res3 就是我們要的結(jié)果  console.log(res3)}

· 這樣的異步代碼寫(xiě)的就看起來(lái)像一個(gè)同步代碼了

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


文章題目:如何理解JavaScript中的Promise-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/ddhpgi.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部