亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

初步了解Promise

timger / 3351人閱讀

摘要:定義或的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。無(wú)法取消,一旦新建立即執(zhí)行若不設(shè)置回調(diào)函數(shù),則內(nèi)部拋出的異常反應(yīng)不到外部狀態(tài)無(wú)法得知進(jìn)展。

問(wèn)題來(lái)了

Promise 有幾種狀態(tài)?
Promise 有什么優(yōu)缺點(diǎn)?
Promise構(gòu)造函數(shù)是同步還是異步執(zhí)行,then呢?
Promise和setTimeout的區(qū)別?
如何實(shí)現(xiàn) Promise.all?
如何實(shí)現(xiàn) Promise.finally?

Promise知識(shí)點(diǎn) 1. Promise

1)定義
保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件(異步操作)的容器

2)特點(diǎn)
(1)對(duì)象的狀態(tài)不受外界影響。三個(gè)狀態(tài):pending(進(jìn)行中)、fulfilled(已成功)、rejected(已失?。?。只有異步操作的結(jié)果,可以決定當(dāng)前狀態(tài)。
(2)狀態(tài)只能改變一次,任何時(shí)候都能得到該結(jié)果。兩種狀態(tài)改變的情況:pending->fulfilled、pending->rejected。狀態(tài)一直保持,給Promise對(duì)象添加回調(diào)函數(shù),能得到該結(jié)果。

3)優(yōu)缺點(diǎn)
(1)可以將異步操作以同步操作的流程表達(dá)出來(lái),避免了層層嵌套的回調(diào)函數(shù);Promise對(duì)象提供統(tǒng)一的接口,是的控制異常操作更加容易。
(2)無(wú)法取消Promise,一旦新建立即執(zhí)行;若不設(shè)置回調(diào)函數(shù),則Promise內(nèi)部拋出的異常反應(yīng)不到外部;pending狀態(tài)無(wú)法得知進(jìn)展。

2. Promise.prototype.then()

1)定義
為Promise實(shí)例添加狀態(tài)改變時(shí)的回調(diào)函數(shù)。.then(resolved的回調(diào)函數(shù),rejected的回調(diào)函數(shù)[可選])

tips:
then方法返回的是一個(gè)新的Promise實(shí)例(不是原來(lái)的那個(gè)Promise實(shí)例),因此可以鏈?zhǔn)?,如?then().then()。
采用鏈?zhǔn)降膖hen,可以指定一組按照次序執(zhí)行的回調(diào)函數(shù)。

3. Promise.prototype.catch()

1)定義
then(null, rehection)或.then(undefiend, rejection)的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。

tips:
promise對(duì)象的錯(cuò)誤具有“冒泡”性質(zhì),錯(cuò)誤一直向后傳遞,直至被捕獲。
promise對(duì)象錯(cuò)誤不會(huì)傳遞到外層代碼,即不同于try/catch,(報(bào)錯(cuò)后不會(huì)終止外層代碼執(zhí)行)。

4. Promise.prototype.finally()

1)定義
不論P(yáng)romise對(duì)象最終狀態(tài)如何,都會(huì)執(zhí)行的操作(ES2018)。本質(zhì)上是then方法的特例。
2)特點(diǎn)
不接受任何參數(shù),不影響原Promise的狀態(tài)。
3)實(shí)際應(yīng)用
post請(qǐng)求loading,在請(qǐng)求結(jié)束后不論結(jié)果如何都關(guān)閉loading

5. Promise.all()

作用:
將多個(gè)Promise實(shí)例,包裝成一個(gè)Promise實(shí)例。

特點(diǎn):
新Promise對(duì)象(p)的狀態(tài)由Promise實(shí)例數(shù)組([p1, p2, p3])決定。
當(dāng)p1、 p2、 p3狀態(tài)都為fulfilled,p的狀態(tài)為fulfilled,p1、p2、p3的返回值組成一個(gè)數(shù)組,傳遞給p的回調(diào)函數(shù)。
當(dāng)p1、 p2、 p3中有一個(gè)狀態(tài)為rejected,p的狀態(tài)為rejected,第一個(gè)被reject的實(shí)例的返回值,會(huì)傳遞給p的回調(diào)函數(shù)。

問(wèn)題解答 1. Promise有幾種狀態(tài)

pending(進(jìn)行中)、fulfilled(已成功)和rejected(已失敗)

2. Promise有什么優(yōu)缺點(diǎn)

可以將異步操作以同步操作的流程表達(dá)出來(lái),避免了層層嵌套的回調(diào)函數(shù);Promise對(duì)象提供統(tǒng)一的接口,是的控制異常操作更加容易。
無(wú)法取消Promise,一旦新建立即執(zhí)行;若不設(shè)置回調(diào)函數(shù),則Promise內(nèi)部拋出的異常反應(yīng)不到外部;pending狀態(tài)無(wú)法得知進(jìn)展。

3. Promise構(gòu)造函數(shù)是同步還是異步執(zhí)行,then呢?

構(gòu)造函數(shù)同步執(zhí)行,then異步執(zhí)行

4. Promise和setTimeout的區(qū)別

setTimeout(fn, 0)在下一輪“事件循環(huán)”開(kāi)始時(shí)執(zhí)行,Promise.then()在本輪“事件循環(huán)”結(jié)束時(shí)執(zhí)行。

5.如何實(shí)現(xiàn) Promise.all
function promiseAll(promises) {
  return new Promise((resolve, reject) => {
    let resultCount = 0;
    let results = new Array(promises.length);

    for (let i = 0; i < promises.length; i++) {
      promises[i].then(value => {
                resultCount++;
        results[i] = value;
        if (resultCount === promises.length) {
          return resolve(results)
        }
      }, error => {
        reject(error)
      })
    }
  })
}

let p1 = new Promise(resolve => resolve("p1"))
let p2 = new Promise(resolve => resolve("p2"))
let p3 = Promise.reject("p3 error")

Promise.all([p1, p2, p3]).then(results => {
  console.log(results)
}).catch(error => {
  console.log(error)      // "p3 error"
})

promiseAll([p1, p2]).then(results => {
  console.log(results)    // ["p1", "p2"]
}).catch(error => {
  console.log(error)
})
6.如何實(shí)現(xiàn) Promise.finally
Promise.prototype.finally = function (callback) {
  let P = this.constructor; // 構(gòu)造函數(shù)
  console.log(P);
  return this.then(
    value  => P.resolve(callback()).then(() => value),  // resolve
    reason => P.resolve(callback()).then(() => { throw reason })  // reject
  );
};
參考文章

《ECMAScript 6 入門(mén)——阮一峰》

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/105737.html

相關(guān)文章

  • js處理異步函數(shù):從callback到promise

    摘要:在處理異步回調(diào)函數(shù)的情況有著越來(lái)越值得推崇的方法及類(lèi)庫(kù),下面會(huì)依次介紹處理異步函數(shù)的發(fā)展史,及源碼解讀。而對(duì)象的狀態(tài),是由第一個(gè)的參數(shù)成功回調(diào)函數(shù)或失敗回調(diào)函數(shù)的返回值決定的。 函數(shù)的執(zhí)行分為同步和異步兩種。同步即為 同步連續(xù)執(zhí)行,通俗點(diǎn)講就是做完一件事,再去做另一件事。異步即為 先做一件事,中間可以去做其他事情,稍后再回來(lái)做第一件事情。同時(shí)還要記住兩個(gè)特性:1.異步函數(shù)是沒(méi)有返回值的...

    dance 評(píng)論0 收藏0
  • js的事件循環(huán)

    摘要:但是事件循環(huán)一般會(huì)在主線程中任務(wù)執(zhí)行完成之后執(zhí)行。所以,上面函數(shù)的調(diào)用棧過(guò)程如下總結(jié)的事件循環(huán)部分,內(nèi)容應(yīng)該算是全部闡述完全了。 前言 還記得那些年面試官問(wèn)你的定時(shí)器的原理嗎?還有呢?Promise的原理呢?原理、原理、原理,問(wèn)的我們懷疑人生。 為了下次不再懵逼,今天,我們來(lái)了解一下Event Loop的概念。我們的初衷是真正的了解和掌握它,了解整體JavaScript的運(yùn)行機(jī)制。至少...

    android_c 評(píng)論0 收藏0
  • 關(guān)于vue、vuex的一些初步小結(jié)

    摘要:只能是同步函數(shù),原因是無(wú)法捕捉異步函數(shù)的快照。除了這三個(gè)概念外,還有類(lèi)比計(jì)算屬性,用于從派生出一些值分割較大的狀態(tài)樹(shù),便于管理。處理表單可手動(dòng)監(jiān)聽(tīng)或是使用帶的雙向綁定計(jì)算屬性。 一、Vue組件的創(chuàng)建 一般語(yǔ)法: Vue.component(tagName, options) 務(wù)必在根組件實(shí)例化之前注冊(cè)組件 組件options說(shuō)明: data: 必須是一個(gè)函數(shù),目的在于返回獨(dú)立的對(duì)象...

    joywek 評(píng)論0 收藏0
  • 微信小程序踩坑系列——從wx.request談?wù)劗惒教幚?/b>

    摘要:其實(shí)我們?cè)谕搅鞒讨胁耪f(shuō)返回,異步?jīng)]有返回這個(gè)概念或者說(shuō)異步返回是沒(méi)有意義的,異步對(duì)應(yīng)的是回調(diào),也就是說(shuō),對(duì)于一個(gè)異步函數(shù),我們應(yīng)該傳入一個(gè)回調(diào)函數(shù)來(lái)接收結(jié)果。 原文鏈接:https://www.xksblog.top/talk-... 見(jiàn)到wx.request的第一眼,就讓我想起了$.ajax這東西,使用起來(lái)確實(shí)有很多不方便,不能忍,幸好小程序是支持ES6語(yǔ)法的,所以可以使用pro...

    RdouTyping 評(píng)論0 收藏0
  • 深入 Promise

    摘要:首先從這個(gè)構(gòu)造函數(shù)說(shuō)起,它是全局對(duì)象的屬性的值,這也就是為什么瀏覽器環(huán)境下我們能直接調(diào)用它的原因,就像這些構(gòu)造函數(shù)一樣。的產(chǎn)生就是像正常使用構(gòu)造函數(shù)那樣構(gòu)建一個(gè),不過(guò)傳給構(gòu)造函數(shù)是內(nèi)部自動(dòng)創(chuàng)建的,作用是把記錄到中。 showImg(https://segmentfault.com/img/bVbgYy2?w=1200&h=600); > new Promise((resolve, re...

    cfanr 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<