中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS的異步函數async/await怎么使用

發布時間:2023-01-29 14:13:53 來源:億速云 閱讀:175 作者:iii 欄目:web開發

這篇“JS的異步函數async/await怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“JS的異步函數async/await怎么使用”文章吧。

ES7 引入的 async/await 是對 JavaScript 異步編程的一種改進,它提供了使用同步樣式代碼異步訪問資源的選項,而不會阻塞主線程。但是,要很好地使用它有點棘手。在本文中,將從不同的角度探索 async/await,并展示如何正確有效地使用它們。

async/await 好處

async/await 帶來的最重要的好處就是同步編程風格,先來看一個例子。

// async/await
const getArticlesByAuthorWithAwait = async (authorId) => {
    const articles = await articleModel.fetchAll();
    return articles.filter((b) => b.authorId === authorId);
};

// promise
const getArticlesByAuthorWithPromise = (authorId) => {
    return articleModel
        .fetchAll()
        .then((articles) => articles.filter((b) => b.authorId === authorId));
};

很明顯,async/await 版本比 promise 版本更容易理解。如果忽略 await 關鍵字,代碼看起來就像任何其他同步語言,如 Python

同時 async/await 有原生瀏覽器支持,截至目前,所有主流瀏覽器都已全面支持異步功能。

需要注意的是 async/await 在使用的過程中需要成對出現,如在函數里面要使用 await ,就必須將函數定義為 async

async/await 可能會產生誤導

有些文章將 async/awaitPromise 進行比較,并聲稱它是 JavaScript 異步編程發展的下一代,這一點個人覺得有點誤導,個人認為 async/await 是一種改進,一個語法糖,不會徹底改變編程風格。

本質上,異步函數仍然是 promises,在正確使用異步函數之前,必須了解 promises

  • Promise.any() 原理解析及使用指南

  • Promise.all() 原理解析及使用指南

  • Promise.race() 原理解析及使用指南

  • Promise.allSettled() 原理解析及使用指南

async/await 陷阱

盡管 await 可以使代碼看起來像同步的,但請記住它們仍然是異步的,必須注意避免過于順序化。

const getArticlesAndAuthor = async (authorId) => {
    const articles = await articleModel.fetchAll();
    const author = await authorModel.fetch(authorId);
    return {
        author,
        articles: articles.filter((article) => article.authorId === authorId),
    };
};

這段代碼在邏輯上看起來是正確的,然而這是回產生誤解。

  • await articleModel.fetchAll() 將等到 fetchAll() 返回。

  • 然后 await authorModel.fetch(authorId) 將會被立即調用。

錯誤處理

使用 promise,異步函數有兩個可能的返回值:resolvereject,以用于正常情況使用 .then() 和異常情況使用.catch()。然而,async/await 錯誤處理就不太好,需要使用 try...catch 來捕獲異常。

const getArticlesByAuthorWithAwait = async (authorId) => {
    try {
        const articles = await articleModel.fetchAll();
        return articles.filter((b) => b.authorId === authorId);
    } catch (error) {
        // 錯誤處理
    }
};

以上就是關于“JS的異步函數async/await怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤台县| 华蓥市| 策勒县| 九龙县| 长治县| 博乐市| 潮州市| 湘潭县| 商河县| 永清县| 靖宇县| 海城市| 柯坪县| 涟源市| 新疆| 乐亭县| 沂水县| 曲沃县| 开江县| 南和县| 丰城市| 郴州市| 申扎县| 新巴尔虎左旗| 安塞县| 报价| 资讯| 武宁县| 广安市| 金乡县| 东源县| 吉安县| 江西省| 南郑县| 九江县| 鄂托克旗| 东乌| 合山市| 阜阳市| 峨眉山市| 东平县|