成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Promise使用

NervosNetwork / 1647人閱讀

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

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

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

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

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

Usage

Promise是一個(gè)對(duì)象,在ES6已經(jīng)被規(guī)范成了原生JavaScript的一部分,但是在ES6之前,則需要使用第三方庫來實(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),這一過程是不可逆的

他的用法(ES6)如下:

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

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

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í)行),那么你可以這樣寫,使得他們按照順序執(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)行可以看見:

p1
p2
p3
over

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

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

相關(guān)文章

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

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

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

    摘要:對(duì)于的來說基元函數(shù)包括組合函數(shù)的類型簽名返回情況完成如果傳入的可迭代對(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博客,一年百來篇優(yōu)質(zhì)文章等著你! 從ES6 開始,我們大都使用的是 P...

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

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

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

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

    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將其寫進(jìn)了語言標(biāo)準(zhǔn),統(tǒng)一了...

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

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

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

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

0條評(píng)論

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