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

資訊專欄INFORMATION COLUMN

如何正確的使用Promise

SwordFly / 1500人閱讀

摘要:那如何使用進(jìn)行異步回調(diào)如何捕獲錯(cuò)誤聲明函數(shù)使用則返回使用則返回錯(cuò)誤,并結(jié)束的繼續(xù)向下執(zhí)行,并會(huì)跳到執(zhí)行過了秒后接收到值返回值可以是數(shù)字,字串,對(duì)象或者是獲得上一個(gè)返回的值或返回的的返回值如用到,則會(huì)直接跳到此處

promise用法

對(duì)比傳統(tǒng)回調(diào)函數(shù)與Pormise的寫法

傳統(tǒng)回調(diào)函數(shù)
// 聲明函數(shù)
function run(callback) {
    let parmas = 0;
    if (callback) callback(parmas);
};
function fnStep1(callback) {
    let parmas = 123;
    if (callback) callback(parmas);
};
function fnStep2(callback) {
    let parmas = 456;
    if (callback) callback(parmas);
};
function fnStep3(callback) {
    let parmas = 789;
    if (callback) callback(parmas);
};
// fnStep4 ... 

// 傳統(tǒng)使用回調(diào)的寫法
run(function (parmas) {
    // parmas = 0
    console.log(parmas);
    fnStep1(function (parmas1) {
        // parmas = 123
        console.log(parmas1);
        fnStep2(function (parmas2) {
            // parmas = 456
            console.log(parmas2);
            fnStep3(function (parmas3) {
                // ...
                // 一直嵌套
            });
        });
    });
});

Promise的寫法
let p = new Promise((resolve, reject) => {
    // ?異步操作,最終調(diào)用:
    //
    const parmas = 0;
    resolve(parmas); // fulfilled
    // ?或
    //   reject("failure reason"); // rejected
})

p
    .then(
    (parmas) => {
        // parmas,resolve返回的值
        console.log(parmas);
        // 你的代碼塊 code...
        return 123; //返回值給下一個(gè)then
    }
    )
    .then(
    (parmas) => {
        // parmas,上一個(gè)then返回的值
        console.log(parmas);
        // 你的代碼塊 code...
        return 456; //返回值給下一個(gè)then
    }
    )
    .then(
    (parmas) => {
        // parmas,上一個(gè)then返回的值
        console.log(parmas);
        // 你的代碼塊 code...
        return 789; //返回值給下一個(gè)then
    }
    )
Promise異步回調(diào)

Promise要比傳統(tǒng)回調(diào)函數(shù)更簡(jiǎn)潔直觀,可讀性更強(qiáng)。

那如何使用Promise進(jìn)行異步回調(diào)? 如何捕獲錯(cuò)誤?

// 聲明函數(shù)
function asyncFn(a) {

    return new Promise((resolve, reject) => {
        a += 1;
        setTimeout(function () {
            // 使用resolve則返回a
            resolve(a);
            // 使用reject則返回錯(cuò)誤,并結(jié)束then的繼續(xù)向下執(zhí)行,并會(huì)跳到catch
            // reject(new Error("fail"));
        }, 2000);
    });

}

// 執(zhí)行
asyncFn(1).then(
    (a) => {
        // 過了2秒后接收到a值 => 2
        console.log(a);

        const newVal = 5;
        // const newVal = {a: 5};
        // const newVal = new Promise((resolve, reject) =>{});
        // 返回值可以是數(shù)字,字串,對(duì)象或者是 Promise
        return newVal;
    }
).then(
    (newVal) => {
        // newVal 獲得上一個(gè)then返回的值 或 返回的Promise的返回值

    }
).catch(
    (err)=>{
        // 如用到reject,則會(huì)直接跳到此處
        console.log(err)
    }
);

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

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

相關(guān)文章

  • 如何正確合理使用 JavaScript async/await !

    摘要:想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳博客一年百來(lái)篇優(yōu)質(zhì)文章等著你引入的在的異步編程中是一個(gè)極好的改進(jìn)??赡軙?huì)產(chǎn)生誤導(dǎo)一些文章將與進(jìn)行了比較,并聲稱它是下一代異步編程風(fēng)格,對(duì)此作者深表異議。結(jié)論引入的關(guān)鍵字無(wú)疑是對(duì)異步編程的改進(jìn)。 showImg(https://segmentfault.com/img/bVbjFP0?w=800&h=450); 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇...

    trigkit4 評(píng)論0 收藏0
  • Promise 鏈?zhǔn)秸{(diào)用與中止

    摘要:一是如何鏈?zhǔn)秸{(diào)用,二是如何中止鏈?zhǔn)秸{(diào)用。到目前為止,我們就基本了解了的用法及特點(diǎn),并實(shí)現(xiàn)用重構(gòu)用回調(diào)函數(shù)寫的異步操作。 Abstract 本文主要講的是如何實(shí)現(xiàn) Promise 的鏈?zhǔn)秸{(diào)用。也就是 promise().then().then().catch() 的形式,然后討論如何在某一個(gè) then() 里面中止 Promise。 在程序中,只要返回了一個(gè) promise 對(duì)象,如果 ...

    cuieney 評(píng)論0 收藏0
  • 如何在 JS 循環(huán)中正確使用 async 與 await

    摘要:蛤當(dāng)你嘗試在循環(huán)中使用時(shí),事情就會(huì)變得復(fù)雜一些。這意味著循環(huán)中的應(yīng)該按順序執(zhí)行。在循環(huán)中使用首先,使用對(duì)數(shù)組進(jìn)行遍歷。在中使用如果在中使用始終返回?cái)?shù)組,這是因?yàn)楫惒胶瘮?shù)總是返回。在循環(huán)中使用當(dāng)你使用時(shí),希望篩選具有特定結(jié)果的數(shù)組。 async 與 await 的使用方式相對(duì)簡(jiǎn)單。 蛤當(dāng)你嘗試在循環(huán)中使用await時(shí),事情就會(huì)變得復(fù)雜一些。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年...

    liujs 評(píng)論0 收藏0
  • 讀懂 SOLID 「依賴倒置」原則

    這是理解SOLID原則中,關(guān)于依賴倒置原則如何幫助我們編寫低耦合和可測(cè)試代碼的第一篇文章。 寫在前頭 當(dāng)我們?cè)谧x書,或者在和一些別的開發(fā)者聊天的時(shí)候,可能會(huì)談及或者聽到術(shù)語(yǔ)SOILD。在這些討論中,一些人會(huì)提及它的重要性,以及一個(gè)理想中的系統(tǒng),應(yīng)當(dāng)包含它所包含的5條原則的特性。 我們?cè)诿看蔚墓ぷ髦校憧赡軟]有那么多時(shí)間思考關(guān)于架構(gòu)這個(gè)比較大的概念,或者在有限的時(shí)間內(nèi)或督促下,你也沒有辦法實(shí)踐一些好...

    Snailclimb 評(píng)論0 收藏0
  • 詳解JavaScript任務(wù)、微任務(wù)、隊(duì)列以及代碼執(zhí)行順序

    摘要:在微任務(wù)期間排隊(duì)的任何其他微任務(wù)都會(huì)被添加到隊(duì)列的末尾并進(jìn)行處理。因此一個(gè)已的調(diào)用時(shí)將立即把一個(gè)微任務(wù)加入微任務(wù)隊(duì)列中。和回調(diào)被列為微任務(wù)。上述規(guī)則確保微任務(wù)不會(huì)中斷執(zhí)行中期的。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 思考下面 JavaScript 代碼: console.log(script start); ...

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

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

0條評(píng)論

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