国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Promise使用

NervosNetwork / 1639人閱讀

摘要:一旦請(qǐng)求事件多了,就避免不了回調(diào)地獄,回調(diào)很可能容易一層接著一層。的意思是承諾,作用和回調(diào)函數(shù)相似,在未來(lái)的某個(gè)時(shí)刻執(zhí)行某件事情。但是的寫(xiě)法更加簡(jiǎn)約易用,更加符合我們平常的思維。

發(fā)布自Kindem的博客,歡迎大家轉(zhuǎn)載,但是要注意注明出處。另外,該文章收納在Kindem的個(gè)人的 IT 知識(shí)整理倉(cāng)庫(kù),歡迎 Star、Fork、投稿
Promise

由于JavaScript是單線程的,所以回調(diào)是JavaScript中避免不了的,所有的網(wǎng)絡(luò)請(qǐng)求、瀏覽器事件都需要使用回調(diào)的方式異步處理。

一旦請(qǐng)求、事件多了,就避免不了回調(diào)地獄,回調(diào)很可能容易一層接著一層。

Promise的意思是承諾,作用和回調(diào)函數(shù)相似,在未來(lái)的某個(gè)時(shí)刻執(zhí)行某件事情。但是Promise的寫(xiě)法更加簡(jiǎn)約易用,更加符合我們平常的思維。

Usage

Promise是一個(gè)對(duì)象,在ES6已經(jīng)被規(guī)范成了原生JavaScript的一部分,但是在ES6之前,則需要使用第三方庫(kù)來(lái)實(shí)現(xiàn)

Promise分為三個(gè)狀態(tài):

pending: 執(zhí)行中

resolved: 已完成

rejected: 已失敗

Promise對(duì)象被實(shí)例化的那一刻,傳入構(gòu)造函數(shù)的方法將會(huì)被執(zhí)行,并且進(jìn)入pending狀態(tài),而一旦完成或者失敗,則會(huì)進(jìn)入相應(yīng)的狀態(tài),這一過(guò)程是不可逆的

他的用法(ES6)如下:

let promise = new Promise((resolve, reject) => {
    if (...) {
        // 如果成功了
        resolve(...);
    } else {
        // 如果失敗了
        reject(...);
    }
});

這里的resolvereject兩個(gè)方法可以使用下面的方法來(lái)給與:

promise
    .then(onSuccess)
    .catch(onFailed);

傳遞給then的方法將在承諾執(zhí)行成功時(shí)被調(diào)用,傳遞給catch的方法將在承諾執(zhí)行失敗時(shí)被調(diào)用

更加方便的一點(diǎn)是,Promise往往可以嵌套使用,這樣可以是多個(gè)任務(wù)有條不紊地進(jìn)行,假設(shè)p1是一個(gè)Promise對(duì)象而p2p3都是能夠產(chǎn)生Promise對(duì)象的方法(如果直接new那么Promise將會(huì)被直接執(zhí)行),那么你可以這樣寫(xiě),使得他們按照順序執(zhí)行,并且可以一次性處理他們產(chǎn)生的錯(cuò)誤

p1
    .then(p2)
    .then(p3)
    .then(onSuccess)
    .catch(onFailed);

比如:

let p1 = new Promise((resolve, reject) => {
    console.log("p1");
    setTimeout(() => {
        resolve("p2");
    }, 1000)
});

let p2 = (result) => new Promise((resolve, reject) => {
    console.log(result);
    setTimeout(() => {
        resolve("p3");
    }, 2000);
});

let p3 = (result) => new Promise((resolve, reject) => {
    console.log(result);
    setTimeout(() => {
        resolve("over");
    }, 3000);
});

p1
    .then(p2)
    .then(p3)
    .then((result) => {
        console.log(result);
    })
    .catch((error) => {
        console.log(error);
    });

運(yùn)行可以看見(jiàn):

p1
p2
p3
over

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96958.html

相關(guān)文章

  • 實(shí)現(xiàn)Promise

    摘要:使用是極好的,它是如此有用以至于我覺(jué)得應(yīng)該好好研究一下,甚至是實(shí)現(xiàn)一個(gè)簡(jiǎn)易的版本。構(gòu)造函數(shù)檢查參數(shù)例如是不是函數(shù)啊初始化,創(chuàng)建對(duì)象執(zhí)行因此構(gòu)造函數(shù)里面?zhèn)魅氲氖橇⒓幢粓?zhí)行的。 使用Promise是極好的,它是如此有用以至于我覺(jué)得應(yīng)該好好研究一下Promise,甚至是實(shí)現(xiàn)一個(gè)簡(jiǎn)易的版本。實(shí)現(xiàn)之前,我們先來(lái)看看Promise的用途: 使用Promise callback hell Promi...

    xcc3641 評(píng)論0 收藏0
  • Promise 中的三兄弟 .all(), .race(), .allSettled()

    摘要:對(duì)于的來(lái)說(shuō)基元函數(shù)包括組合函數(shù)的類(lèi)型簽名返回情況完成如果傳入的可迭代對(duì)象為空,會(huì)同步地返回一個(gè)已完成狀態(tài)的。相反,如果是在指定的時(shí)間之后完成,剛返回結(jié)果就是一個(gè)拒絕狀態(tài)的從而觸發(fā)方法指定的回調(diào)函數(shù)。在行中,對(duì)每個(gè)小任務(wù)得到的結(jié)果進(jìn)行匯總。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 從ES6 開(kāi)始,我們大都使用的是 P...

    vspiders 評(píng)論0 收藏0
  • JavaScript 異步

    摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。寫(xiě)一個(gè)符合規(guī)范并可配合使用的寫(xiě)一個(gè)符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來(lái)處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問(wèn)題描述 在開(kāi)發(fā)過(guò)程中,遇到一個(gè)需求:在系統(tǒng)初始化時(shí)通過(guò)http獲取一個(gè)第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個(gè)接口,可通過(guò)...

    tuniutech 評(píng)論0 收藏0
  • 【筆記】你不知道的JS讀書(shū)筆記——Promise

    摘要:寫(xiě)在前面這一章的順序?qū)τ谖唇佑|過(guò)使用過(guò)的童鞋而言略抽象了,前邊幾章主要為了說(shuō)明和之前的異步方式相比有什么優(yōu)勢(shì)和它能解決什么問(wèn)題,后邊才詳解的設(shè)計(jì)和各種場(chǎng)景下如何使用。建議先了解和簡(jiǎn)單使用過(guò)后再閱讀,效果更佳。 寫(xiě)在前面:Promise這一章的順序?qū)τ谖唇佑|過(guò)使用過(guò)Promise的童鞋而言略抽象了,前邊幾章主要為了說(shuō)明Promise和之前的異步方式相比有什么優(yōu)勢(shì)和它能解決什么問(wèn)題,后邊才...

    mumumu 評(píng)論0 收藏0
  • Promise使用須知

    摘要:已完成意味著操作成功完成。處理實(shí)例實(shí)例生成以后,可以用方法分別指定狀態(tài)和狀態(tài)的回調(diào)函數(shù)。第二個(gè)回調(diào)函數(shù)在的狀態(tài)變成時(shí)被調(diào)用。方法是的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。具體的使用示例如下情形一全部成功的情況結(jié)果為。 一.關(guān)于Promise promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案(回調(diào)函數(shù)和事件)更合理和更強(qiáng)大。它由社區(qū)最早提出和實(shí)現(xiàn),ES6將其寫(xiě)進(jìn)了語(yǔ)言標(biāo)準(zhǔn),統(tǒng)一了...

    Tikitoo 評(píng)論0 收藏0
  • 學(xué)習(xí) Promise,掌握未來(lái)世界 JS 異步編程基礎(chǔ)

    摘要:構(gòu)造函數(shù)規(guī)定,對(duì)象是一個(gè)構(gòu)造函數(shù),用來(lái)生成實(shí)例。如果中的回調(diào)函數(shù)拋出一個(gè)錯(cuò)誤,那么返回的將會(huì)成為拒絕狀態(tài),并且將拋出的錯(cuò)誤作為拒絕狀態(tài)的回調(diào)函數(shù)的參數(shù)值。 其實(shí)想寫(xiě) Promise 的使用已經(jīng)很長(zhǎng)時(shí)間了。一個(gè)是在實(shí)際編碼的過(guò)程中經(jīng)常用到,一個(gè)是確實(shí)有時(shí)候小伙伴們?cè)谑褂脮r(shí)也會(huì)遇到一些問(wèn)題。Promise 也確實(shí)是 ES6 中 對(duì)于寫(xiě) JS 的方式,有著真正最大影響的 API 特性之一。本...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<