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

資訊專欄INFORMATION COLUMN

Promise的基本使用

biaoxiaoduan / 519人閱讀

摘要:執(zhí)行完成接收一個(gè)函數(shù)作為參數(shù),函數(shù)有兩個(gè)參數(shù),和分別表示異步操作執(zhí)行后成功的回調(diào)函數(shù)和失敗的回調(diào)函數(shù)。所以通常采用一個(gè)函數(shù)包含它執(zhí)行完成可以使用異步操作中的數(shù)據(jù)執(zhí)行完調(diào)用方法,就相當(dāng)于我們之前寫的回調(diào)函數(shù)。

基本概念
個(gè)人理解就是使用同步編程的寫法完成異步編程操作。
const promise = new Promise((resolve, reject) => {
    //some asynchronous  code
    setTimeout(() => {
        console.log("執(zhí)行完成");
        resolve("some data");
    }, 2000);
});

Promise 接收一個(gè)函數(shù)作為參數(shù),函數(shù)有兩個(gè)參數(shù),resolvereject 分別表示異步操作執(zhí)行后成功的回調(diào)函數(shù)和失敗的回調(diào)函數(shù)。

Promise 實(shí)例后馬上執(zhí)行。所以通常采用一個(gè)函數(shù)包含它

function runAsync() {
    return new Promise((resolve, reject) => {
        //some asynchronous  code
        setTimeout(() => {
            console.log("執(zhí)行完成");
            resolve("some data");
        }, 2000);
    });
}
runAsync().then((data) => {
    console.log(data);//可以使用異步操作中的數(shù)據(jù)
})

runAsync() 執(zhí)行完調(diào)用 then 方法,then() 就相當(dāng)于我們之前寫的回調(diào)函數(shù)。

resolve 和 reject
function paramTest(){
    return new Promise((resolve, reject) => {
        let number = Math.ceil(Math.random() * 10);
        if (number < 5) {
            resolve(number);
        }else{
            reject("out of range");
        }
    })
}
paramTest().then((number) => {
    console.log("resolved");
    console.log(number);
},(reason) => {
    console.log("rejected");
    console.log(reason);
})

Promise 有三種狀態(tài):pending(進(jìn)行中)、fulfilled(已成功)和 rejected(已失?。?/p>

paramTest() 例子有兩種情況:

當(dāng) number < 5 時(shí),我們認(rèn)為是成功情況,將狀態(tài)從 pending 變?yōu)?fulfilled

當(dāng) number >= 5 時(shí),我們認(rèn)為是失敗情況,將狀態(tài)從 pending 變?yōu)?rejected

所以paramTest() 的執(zhí)行結(jié)果:
fulfilled rejected
resolved rejected
number out of range
catch的用法
我們繼續(xù)調(diào)用 paramTest 方法舉例
paramTest().then((number) => {
    console.log("resolved");
    console.log(number);
    console.log(data); //data為未定義
},(reason) => {
    console.log("rejected");
    console.log(reason);
}).catch((err) => {
    console.log(err);
})

catch 方法其實(shí)就是 .then(null, rejection) 的別名,也是用來處理失敗失敗的回調(diào)函數(shù),但是還有一個(gè)作用:當(dāng) resolve 回調(diào)中如果出現(xiàn)錯(cuò)誤了,不會(huì)堵塞,會(huì)執(zhí)行 catch 中的回調(diào)。

all的用法
const p = Promise.all([p1, p2, p3]);

p.then(result => {
    console.log(result);
})
all 方法接收一個(gè)數(shù)組參數(shù),數(shù)組中每一項(xiàng)返回的都是 Promise 對象,只有當(dāng) p1, p2, p3 都執(zhí)行完才會(huì)進(jìn)入 then 回調(diào)。p1, p2, p3 返回的數(shù)據(jù)會(huì)以一個(gè)數(shù)組的形式傳到 then 回調(diào)中。
const p1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve("p1");
    }, 1000);
})
.then(result => result)
.catch(e => e);

const p2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve("p2");
    }, 3000);
})
.then(result => result)
.catch(e => e);

Promise.all([p1, p2])
.then(result => console.log(result))
.catch(e => console.log(e));
//3秒后輸出["p1", "p2"]
race的用法
const p = Promise.race([p1, p2, p3]);

p.then(result => {
    console.log(result);
})
race 的用法與 all 如出一轍,不同的是 all 方法需要參數(shù)的每一項(xiàng)都返回成功了才會(huì)執(zhí)行 then;而 race 則是只要參數(shù)中的某一項(xiàng)返回成功就執(zhí)行 then 回調(diào)。

以下是 race 的例子,和 all 方法對比,可以看到返回值有很明顯的區(qū)別。

const p1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve("p1");
    }, 1000);
})
.then(result => result)
.catch(e => e);

const p2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve("p2");
    }, 3000);
})
.then(result => result)
.catch(e => e);

Promise.race([p1, p2])
.then(result => console.log(result))
.catch(e => console.log(e));
//1秒后輸出 "p1"

點(diǎn)擊這里查看本文中實(shí)例源代碼

resloader是基于Promise實(shí)現(xiàn)的一個(gè)圖片預(yù)加載并展示加載進(jìn)度的插件,猛戳這里了解詳情。如果感覺還可以的話,歡迎star

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

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

相關(guān)文章

  • Promise之深入淺出

    摘要:不兼容問題,本文不予以處理,出門左轉(zhuǎn),找谷哥。如果中的回調(diào)函數(shù)拋出一個(gè)錯(cuò)誤,那么返回的將會(huì)成為拒絕狀態(tài),并且將拋出的錯(cuò)誤作為拒絕狀態(tài)的回調(diào)函數(shù)的參數(shù)值。 Promise與async 主要內(nèi)容: promise基本實(shí)現(xiàn)原理 promise 使用中難點(diǎn)(鏈?zhǔn)秸{(diào)用,API基本上返回都是一個(gè)新Promise,及參數(shù)傳遞) promise 對異常處理 參考: ? 30分鐘,讓你徹底明...

    littleGrow 評論0 收藏0
  • 異步發(fā)展流程 —— Promise 基本使用

    摘要:閱讀原文簡介是的新特性,提供了對異步編程控制的新的解決方案,在過去書寫異步代碼時(shí)要靠回調(diào)函數(shù),當(dāng)異步操作依賴于其他異步操作的返回值時(shí),會(huì)出現(xiàn)一種現(xiàn)象,被程序員們稱為回調(diào)地獄,即多層回調(diào)函數(shù)嵌套,這種代碼的可讀性維護(hù)性都很差,因此誕生了,當(dāng)然 showImg(https://segmentfault.com/img/remote/1460000018998462); 閱讀原文 Pro...

    venmos 評論0 收藏0
  • Promise入門之基本用法

    摘要:入門之基本用法背景在我們使用異步函數(shù)比如進(jìn)行編寫代碼,如果我們需要很多個(gè)請求不同的接口,而下一個(gè)接口需要依賴上一個(gè)接口的返回值,這樣,我們的代碼則需要在各種回調(diào)函數(shù)中嵌套,這樣一層一層地下去,就形成了回調(diào)地獄。 Promise入門之基本用法 背景 在我們使用異步函數(shù)比如ajax進(jìn)行編寫代碼,如果我們需要很多個(gè)ajax請求不同的接口,而下一個(gè)接口需要依賴上一個(gè)接口的返回值,這樣,我們的代...

    siberiawolf 評論0 收藏0
  • Promise學(xué)習(xí):基礎(chǔ)入門

    摘要:今天來學(xué)習(xí)下吧其實(shí)這在筆試上也是一個(gè)考點(diǎn)基本介紹對象是熟悉的名字吧工作組提出的規(guī)范原本只是社區(qū)提出的構(gòu)想一些外部函數(shù)庫率先實(shí)現(xiàn)了該功能中將其寫入了語言標(biāo)準(zhǔn)目的為異步操作提供統(tǒng)一接口是啥它就是一個(gè)中一個(gè)對象起著代理作用充當(dāng)異步操作與回調(diào)函 今天來學(xué)習(xí)下Promise吧,其實(shí)這在筆試上也是一個(gè)考點(diǎn). 基本介紹 Promise對象是CommonJS(熟悉的名字吧- -)工作組提出的規(guī)范.Pr...

    iamyoung001 評論0 收藏0
  • Promise 基本原理 & 異步

    摘要:追加在本輪循環(huán)的異步任務(wù)追加在次輪循環(huán)的異步任務(wù)規(guī)定,和的回調(diào)函數(shù),追加在本輪循環(huán),即同步任務(wù)一旦執(zhí)行完成,就開始執(zhí)行它們。 author: 陳家賓 email: 617822642@qq.com date: 2018/2/23 Promise 基本實(shí)現(xiàn) var PENDING = 0; var FULFILLED = 1; var REJECTED = 2; function Pr...

    mtunique 評論0 收藏0

發(fā)表評論

0條評論

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