国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

promise的原理和幾種使用方法

這篇具有很好參考價值的文章主要介紹了promise的原理和幾種使用方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  1. promise概念

    Promise 是異步編程的一種解決方案:從語法上講,promise是一個對象,從它可以獲取異步操作的消息;從本意上講,它是承諾,承諾它過一段時間會給你一個結果,其實是一個構造函數(shù),自己身上有all、reject、resolve,race這幾個方法,原型上有then、catch,finally等方法。promise有三種狀態(tài): pending(等待態(tài)),fulfiled(成功態(tài)),rejected(失敗態(tài));狀態(tài)一旦改變,就不會再變。創(chuàng)造promise實例后,它會立即執(zhí)行。

  2. promise.prototytype.then():promise實例狀態(tài)改變的回調函數(shù),有兩個參數(shù):第一個是成功回調函數(shù),第二個是失敗回調函數(shù)。他會返回一個全新的promise,因此可以繼續(xù)then鏈式調用。

  3. promise.prototype.catch():失敗回調函數(shù),狀態(tài)變?yōu)閞ejected執(zhí)行。相當于promise. prototytype.then(null/undifined,rejection),如果promise內發(fā)生了錯誤,但卻沒有定義catch(),這時運行到這一行代碼會報錯,但是不會影響到promise后面代碼的執(zhí)行

promise的幾種方法:

1.基礎用法:

new Promise((resolve, reject) => {
        // resolve 成功的回調
        // reject  失敗的回調
        // 成功或者失敗只能存在一種狀態(tài),不能同事執(zhí)行兩個狀態(tài)
        resolve('成功')
        reject('失敗')
        // then 是獲取Promise的resolve, reject狀態(tài)
    }).then(res => {
        // 成功
        console.log(res);
    }, error => {
        // 失敗
        console.log(error);
    })

2.promise.finally():promise實例無論狀態(tài)是什么都會執(zhí)行的函數(shù),finally不接受任何參數(shù)。

 const p1 = function () {
            return new Promise((resolve, reject) =>{
                // 失敗時
                // reject("失敗了")
                //  resolve(2);
                // 成功時
                resolve(2)
                reject("失敗了")
            });
        };
        p1().then(res=> {
            console.log(res);
        }).catch(error=>{
            console.log(error);
        }).finally(()=>{
            console.log('無論失敗或者成功都會走這個函數(shù)');
        })

3.promise.all():將多個promise實例包裝成一個新的promise實例

const p1 = function () {
                    return new Promise((resolve, reject)=>{
                        resolve(1);
                    });
                };
                const p2 = function () {
                    return new Promise((resolve, reject)=>{
                        resolve(2);
                    });
                };
                const p3 = function () {
                    return new Promise((resolve, reject)=>{
                        // reject("失敗了")
                        resolve(3);
                    });
                };

                // Promise.all 所有封裝的Promise都成功才會成功,只要有一個失敗就會失敗
                let result = Promise.all([p1(), p2(), p3()]).then(results=>{
                    console.log(results);//[1, 2, 3]
                }).catch(error=>{
                    console.log(err);
                    // 當p3的reject("失敗了")被解開時控制臺會打印失敗了
                })


              

4.promise.race():

// race()  把多個封裝的promise 組合起來,看誰跑的快
        const p1 = function () {
            return new Promise((resolve, reject)=>{
                setTimeout(() => {
                    resolve(1);
                }, 500)

            });
        };
        const p2 = function () {
            return new Promise((resolve, reject)=>{
                setTimeout(() => {
                    resolve(2);
                }, 400)
            });
        };
        const p3 = function () {
            return new Promise((resolve, reject)=>{
                setTimeout(() => {
                    resolve(3);
                }, 600)
            });
        };
        //誰先執(zhí)行完成就先執(zhí)行回調,其余的將不會再進入race的任何回調,其余的沒有停止,自行執(zhí)行
        let result = Promise.race([p1(), p2(), p3()]).then(results=>{
            console.log(results);
        }).catch(error=>{
            console.log(error);
        })





5.promise.any():

 // 1. 只要有一個實例變成fulfilled,他就會變成fulfilled
        // 2. 只有全部實例狀態(tài)都變成rejected,它才會變成rejected
  const p1 = function () {
            return new Promise((resolve, reject)=>{  
                resolve(5);
            });
        };
        const p2 = function () {
            return new Promise((resolve, reject)=>{
                reject(2);
            });
        };
        const p3 = function () {
            return new Promise((resolve, reject)=>{ 
                resolve(3);
            });
        };

        let result = Promise.any([p1(), p2(), p3()]).then(results=>{
            console.log(results);
            // 5 因為p1成功了,只返回找到的第一個成功的,遇到reject會繼續(xù)向下尋找
        }).catch(error=>{
            console.log(error);
            // 當三個return返回的都是reject時,控制臺打印AggregateError: All promises were rejected
        })

6.promise.allSettled():等所有實例都返回結果,他的狀態(tài)就只會變成fulfilled文章來源地址http://www.zghlxwxcb.cn/news/detail-407522.html

const p1 = function () {
        return new Promise((resolve, reject) => {
            resolve(1);
        });
    };
    const p2 = function () {
        return new Promise((resolve, reject) => {
            resolve(2);
        });
    };
    const p3 = function () {
        return new Promise((resolve, reject) => {
            reject(3);
        });
    };

    // Promise.allSettled無論成功或者失敗會把所有的狀態(tài)返回給results
    // 沒有catch
    let result = Promise.allSettled([p1(), p2(), p3()]).then(results => {
        console.log(results);
    })

到了這里,關于promise的原理和幾種使用方法的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Linux 查看內存使用情況的幾種方法

    Linux 查看內存使用情況的幾種方法

    *以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「ENG八戒」https://mp.weixin.qq.com/s/27UaVm5_FMhCnxB88pc0QA 在運行 Linux 系統(tǒng)的過程中為了讓電腦或者服務器以最佳水平運行,常常需要監(jiān)控內存統(tǒng)計信息。 那么今天我們就來看看有哪些方法可以訪問所有相關信息

    2023年04月20日
    瀏覽(27)
  • 分享Linux 查看內存使用情況的幾種方法

    分享Linux 查看內存使用情況的幾種方法

    Linux?查看內存使用情況的幾種方法包括使用?free?命令、top?命令、htop?命令、vmstat?命令和/proc/meminfo?文件。這些方法可以幫助用戶了解系統(tǒng)內存的使用情況,包括總內存、已用內存、空閑內存、緩存和交換分區(qū)等信息。 在運行 Linux 系統(tǒng)的過程中為了讓電腦或者服務器以最

    2024年02月04日
    瀏覽(23)
  • 使用html網(wǎng)頁播放多個視頻的幾種方法

    使用html網(wǎng)頁播放多個視頻的幾種方法

    ? ? ? ? 因為項目測試需要,我需要可以快速知道自己推流的多路視頻流質量,于是我想到可以使用html網(wǎng)頁來播放視頻,實現(xiàn)效果極其簡單,方法有好幾種,以下是幾種記錄: ? ? ? ? 注意 :測試過,VLC需要使用360急速瀏覽器,于是以下都是基于360急速瀏覽器測試的: vi

    2024年04月28日
    瀏覽(21)
  • QTextDocument的使用方法及幾種初始化方式

    qtextDocument并不像控件一樣可以通過拖拽方式拉到設計器中使用,也不能直接聲明就可以初始化使用,而是需要通過包涵庫文件的方式包涵在當前的窗體文件中。 如: 上面說了Qtextdocument并不是控件,它是輔助配合QT中的文本編輯控件進行文本操作的類庫。 QTextDocument在使用之

    2024年02月09日
    瀏覽(20)
  • Pytorch基本概念和使用方法

    Pytorch基本概念和使用方法

    目錄 1 Adam及優(yōu)化器optimizer(Adam、SGD等)是如何選用的? 1)Momentum 2)RMSProp 3)Adam 2 Pytorch的使用以及Pytorch在以后學習工作中的應用場景。 1)Pytorch的使用 2)應用場景 3 不同的數(shù)據(jù)、數(shù)據(jù)集加載方式以及加載后各部分的調用處理方式。如DataLoder的使用、datasets內置數(shù)據(jù)集的使

    2024年02月07日
    瀏覽(27)
  • 使用python判斷字母大小寫的幾種方法

    使用Python中的內置函數(shù) isupper() 和 islower() 來判斷一個字母是否為大寫或小寫字母。 用戶輸入一個字母,程序使用isupper()和islower()函數(shù)判斷字母是否為大寫或小寫,并輸出相應的信息。如果用戶輸入了除字母以外的字符,程序會輸出一個錯誤信息。 使用ASCII碼值來判斷字母大

    2024年02月04日
    瀏覽(78)
  • 使用JavaScript關閉瀏覽器窗口的幾種方法

    在Web開發(fā)中,有時候我們需要通過JavaScript來控制用戶的瀏覽器行為,其中之一就是關閉瀏覽器窗口。本文將介紹幾種使用JavaScript關閉瀏覽器窗口的方法,并提供相應的源代碼示例。 使用window.close方法關閉窗口 要關閉當前窗口,可以使用window.close方法。這個方法會關閉當前瀏

    2024年02月04日
    瀏覽(29)
  • JDBC的概念、作用、使用方法等

    JDBC是Java Database Connectivity的縮寫,它是一組用于Java編程語言中連接和操作數(shù)據(jù)庫的API。JDBC API定義了一組標準接口,使Java應用程序能夠與任何關系型數(shù)據(jù)庫進行交互,如Oracle、MySQL、PostgreSQL、Microsoft SQL Server等。 JDBC的作用是允許Java應用程序通過JDBC API與數(shù)據(jù)庫進行通信,以

    2024年02月09日
    瀏覽(21)
  • SVG 在前端的7種使用方法,你還知道哪幾種?

    SVG 在前端的7種使用方法,你還知道哪幾種?

    點贊 + 關注 + 收藏 = 學會了 技術一直在演變,在網(wǎng)頁中使用 SVG 的方法也層出不窮。每個時期都有對應的最優(yōu)解。 所以我打算把我知道的 7種 SVG 的使用方法列舉出來,有備無患~ 如果你還知道其他方法,可以在評論區(qū)補充~ ```svg ``` xml 是瀏覽器能讀取的格式,但如果希望 sv

    2024年02月06日
    瀏覽(32)
  • 一文教會你Linux 查看內存使用情況的幾種方法

    一文教會你Linux 查看內存使用情況的幾種方法

    在運行 Linux 系統(tǒng)的過程中為了讓電腦或者服務器以最佳水平運行,常常需要監(jiān)控內存統(tǒng)計信息。 那么今天我們就來看看有哪些方法可以訪問所有相關信息并幫助管理員監(jiān)控內存統(tǒng)計信息。 查看或者獲取 Linux 中的內存使用情況既可以通過命令的方式,也可以通過桌面端的GU

    2024年02月10日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包