91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Promise:駕馭 JavaScript 異步編程的藝術(shù)

jf_85280293 ? 來源:jf_85280293 ? 作者:jf_85280293 ? 2026-02-24 13:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言:從單線程的困境說起

JavaScript 是一門迷人的單線程語言。正如文檔1(1.html)中所言:“js 不等, 單線程腳本語言”,它的簡單性使得初學者易于上手,但也帶來了一個核心挑戰(zhàn):如何在不阻塞主線程的前提下處理耗時任務?

想象一個場景:你在一個繁忙的咖啡館點單,如果柜臺后面只有一位服務員,他必須等待咖啡機慢慢煮好每一杯咖啡才能服務下一位顧客,隊伍將會排得無窮無盡。JavaScript的早期正是如此——同步執(zhí)行的代碼就像那位固執(zhí)的服務員,必須等待當前任務完全完成才能處理下一個。

異步的黎明:回調(diào)函數(shù)的時代

為了解決這個問題,JavaScript引入了異步編程模式。文檔1展示了最基礎(chǔ)的異步操作——setTimeout:

javascript
 體驗AI代碼助手
 代碼解讀
復制代碼
console.log(1);
setTimeout(function(){
    console.log(2);
},3000)
console.log(3);

執(zhí)行順序?qū)⑹?、3、2。這就是異步的本質(zhì):耗時任務被放入"事件循環(huán)"(event loop)中,主線程繼續(xù)執(zhí)行后續(xù)代碼,等到適當時候再回來處理異步結(jié)果。文件I/O操作也是如此,如文檔3(3.js)所示,fs.readFile讀取文件時不會阻塞后續(xù)的console.log(2)。

然而,回調(diào)函數(shù)帶來了新的問題——"回調(diào)地獄"。多個異步操作嵌套時,代碼會變得難以閱讀和維護:

javascript
 體驗AI代碼助手
 代碼解讀
復制代碼
fs.readFile('./a.txt', function(err, data1) {
    if (err) return;
    fs.readFile('./b.txt', function(err, data2) {
        if (err) return;
        fs.readFile('./c.txt', function(err, data3) {
            if (err) return;
            // 三層嵌套后的處理邏輯
        });
    });
});

Promise的誕生:異步任務同步化

ES6引入的Promise正是為了解決這個問題,正如文檔2(2.html)標題所言:"異步,變同步"。Promise不是一個具體的異步操作,而是一個管理異步操作的高級工具類

文檔2展示了Promise的基本用法:

javascript
 體驗AI代碼助手
 代碼解讀
復制代碼
const p = new Promise((resolve) => {
    setTimeout(function(){
        console.log(2);
        resolve();
    },5000)
})

p.then(() => {
    console.log(3);
})
console.log(4);

這里的執(zhí)行順序是1、4、2、3。關(guān)鍵點在于:Promise的executor函數(shù)((resolve) => {...})是同步立即執(zhí)行的,但內(nèi)部的異步操作(如setTimeout)仍然是異步的。

Promise的核心機制:狀態(tài)與承諾

Promise的核心思想可以用一個生活比喻來理解:它就像你在餐廳點餐后拿到的一個取餐號碼。餐廳(JavaScript引擎)承諾(Promise)會在餐點準備好時通知你,而你不需要在柜臺前干等。

Promise有三種狀態(tài):

pending(等待中):異步操作尚未完成

fulfilled(已完成):異步操作成功完成,調(diào)用resolve()

rejected(已拒絕):異步操作失敗,調(diào)用reject()

文檔3(3.js)展示了完整的Promise錯誤處理模式:

javascript
 體驗AI代碼助手
 代碼解讀
復制代碼
const p = new Promise((resolve, reject) => {
    console.log(3);
    fs.readFile('./a.txt', function(err, data){
        if(err){
            reject(err);  // 失敗時調(diào)用reject
            return;
        }
        resolve(data.toString());  // 成功時調(diào)用resolve
    })
})

p.then((data) => {
    console.log(data,'////////');
}).catch((err) => {
    console.log(err,'讀取文件失敗');
})

Promise的威力:鏈式調(diào)用與組合

Promise的真正強大之處在于其鏈式調(diào)用能力。文檔4(4.html)展示了如何使用Promise處理網(wǎng)絡請求:

ini
 體驗AI代碼助手
 代碼解讀
復制代碼
fetch('https://api.github.com/orgs/lemoncode/members')
    .then(data => data.json())
    .then(res => {
        document.getElementById('members').innerHTML = 
            res.map(item => `${item.login}`).join('');
    })

這里的fetch返回一個Promise,.then(data => data.json())處理響應體,再下一個.then處理解析后的JSON數(shù)據(jù)。每個.then返回的值會成為下一個.then的參數(shù),或者可以返回一個新的Promise。

Promise在現(xiàn)代開發(fā)中的應用

文檔6(readme.md)總結(jié)了Promise的核心價值:"es6 提供的異步變同步的高級工具類"。它讓異步代碼擁有了類似同步代碼的清晰結(jié)構(gòu):

錯誤處理集中化:通過.catch()統(tǒng)一處理所有錯誤,告別每個回調(diào)都判斷if (err)的時代

代碼可讀性提升:鏈式調(diào)用讓異步流程一目了然

組合能力強大:Promise.all()可以并行執(zhí)行多個異步操作,Promise.race()可以競速獲取最快結(jié)果

從Promise到async/await:異步編程的進化

值得一提的是,Promise為更現(xiàn)代的async/await語法奠定了基礎(chǔ)。async/await讓異步代碼看起來和同步代碼幾乎一樣,進一步降低了異步編程的心智負擔:

javascript
 體驗AI代碼助手
 代碼解讀
復制代碼
async function getMembers() {
    try {
        const response = await fetch('https://api.github.com/orgs/lemoncode/members');
        const members = await response.json();
        document.getElementById('members').innerHTML = 
            members.map(item => `${item.login}`).join('');
    } catch (error) {
        console.error('獲取成員失敗:', error);
    }
}

結(jié)語:掌握異步,駕馭現(xiàn)代Web開發(fā)

Promise不僅僅是ES6的一個新特性,它代表了JavaScript異步編程范式的根本轉(zhuǎn)變。從文檔中的基礎(chǔ)示例到現(xiàn)實世界中的復雜應用,Promise讓開發(fā)者能夠以更優(yōu)雅、更健壯的方式處理異步操作。

正如文檔6所言,JavaScript需要"負責事件、頁面更新",在單線程的限制下,Promise提供了一種機制,讓耗時任務不再阻塞用戶界面,同時保持代碼的清晰和可維護性。掌握Promise,就是掌握了現(xiàn)代JavaScript異步編程的核心技藝。

無論是處理文件I/O(如文檔3)、定時任務(如文檔2)還是網(wǎng)絡請求(如文檔4),Promise都提供了一個統(tǒng)一、強大的抽象層。在異步無處不在的現(xiàn)代Web開發(fā)中,Promise已成為不可或缺的工具,是每個JavaScript開發(fā)者必須掌握的核心概念。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    526

    瀏覽量

    56330
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    AUDI攜手Momenta開創(chuàng)“駕馭感”輔助駕駛新紀元

    2025年9月16日,AUDI首款豪華電動車型奧迪 E5 Sportback正式上市。車型搭載由奧迪和Momenta聯(lián)合打造的行業(yè)首個具有專屬“駕馭感”的輔助駕駛方案,提供覆蓋城市、高速高架及泊車的全景高階輔助駕駛能力,為追求科技的年輕派消費者帶來全新的“輔助駕馭”新體驗
    的頭像 發(fā)表于 09-17 10:11 ?1425次閱讀

    HarmonyOS入門指南

    OpenHarmony三方庫中心倉 堅果派 童長老倉庫中心 鴻蒙寶典 一本快速學習鴻蒙的電子書 promises-book JavaScript Promise迷你書。 harmony-utils 一款功能豐富且極易
    的頭像 發(fā)表于 06-27 00:11 ?789次閱讀

    ZR電機高階性能輕松駕馭3C電子行業(yè)各應用場景

    國奧科技ZR電機以高階性能駕馭中階需求,輕松適配3C電子制造行業(yè)多種裝配與檢測場景
    的頭像 發(fā)表于 06-20 18:08 ?867次閱讀
    ZR電機高階性能輕松<b class='flag-5'>駕馭</b>3C電子行業(yè)各應用場景

    NVIDIA AI如何助力藝術(shù)創(chuàng)意落地

    本次 GTC 將在歐洲著名藝術(shù)之都巴黎舉辦,特別策劃的藝術(shù)畫廊將展示 AI 如何助力創(chuàng)意落地,實現(xiàn)技術(shù)與靈感碰撞的愿景。
    的頭像 發(fā)表于 06-12 15:26 ?977次閱讀

    HarmonyOS NEXT應用開發(fā)-Notification Kit(用戶通知服務)notificationManager.requestEnableNotification(deprecated)

    Phone2in1TabletCarWearable requestEnableNotification(): Promise 應用請求通知使能。使用Promise異步回調(diào)。 說明 從API version 12開始不再維護,建
    發(fā)表于 06-11 15:54

    HarmonyOS NEXT應用開發(fā)-Notification Kit(用戶通知服務)notificationManager.setBadgeNumber10+

    : number): Promise 設定角標個數(shù),在應用的桌面圖標上呈現(xiàn)。使用Promise異步回調(diào)。 當角標設定個數(shù)取值小于或等于0時,表示清除角標。取值大于99時,通知角標將顯示99+。 系統(tǒng)能力
    發(fā)表于 06-10 14:52

    第二十四章 通用同步異步收發(fā)器(USART)

    本文介紹了W55MH32的通用同步異步收發(fā)器(USART),其支持全雙工異步通信、NRZ格式,具分數(shù)波特率發(fā)生器,可編程數(shù)據(jù)字長、停止位等。支持LIN、IrDA等模式,有DMA及多種中斷,適用于多場景高速通信。
    的頭像 發(fā)表于 05-29 15:44 ?2313次閱讀
    第二十四章 通用同步<b class='flag-5'>異步</b>收發(fā)器(USART)

    HarmonyOS NEXT應用開發(fā)-Notification Kit(用戶通知服務)notificationManager.isDistributedEnabled

    Phone2in1TabletCarWearable isDistributedEnabled(): Promise 查詢設備是否支持分布式通知。使用Promise異步回調(diào)。 系統(tǒng)能力
    發(fā)表于 05-14 15:52

    HarmonyOS NEXT應用開發(fā)-Notification Kit(用戶通知服務)notificationManager.getSlots

    Phone2in1TabletCarWearable getSlots(): Promise<Array> 獲取此應用程序的所有通知渠道。使用Promise異步回調(diào)。 系統(tǒng)能力
    發(fā)表于 05-13 15:48

    HarmonyOS NEXT應用開發(fā)-Notification Kit(用戶通知服務)notificationManager.getSlot

    : SlotType): Promise 獲取一個指定類型的通知渠道。使用Promise異步回調(diào)。 系統(tǒng)能力:SystemCapability.Notification.Notification 示例
    發(fā)表于 05-12 14:57

    HarmonyOS NEXT應用開發(fā)-Notification Kit(用戶通知服務)notificationManager.getActiveNotifications

    Phone2in1TabletCarWearable getActiveNotifications(): Promise<Array> 獲取當前應用未刪除的通知列表。使用Promise異步回調(diào)。 系統(tǒng)能力
    發(fā)表于 05-08 16:23

    在KaihongOS中,可以使用文件管理對文件進行基礎(chǔ)的操作

    ?: ListFileOptions): Promise 列出文件夾下所有文件名,支持遞歸列出所有文件名(包含子目錄下),支持文件過濾,使用Promise異步返回。 系統(tǒng)能力
    發(fā)表于 05-08 06:39

    HarmonyOS NEXT應用開發(fā)-Notification Kit(用戶通知服務)notificationManager.cancelAll

    Phone2in1TabletCarWearable cancelAll(): Promise 取消當前應用所有已發(fā)布的通知。使用Promise異步回調(diào)。 系統(tǒng)能力
    發(fā)表于 04-30 17:25

    HarmonyOS NEXT應用開發(fā)-Notification Kit(用戶通知服務)notificationManager.addSlot

    ); 2.notificationManager.addSlot 支持設備Phone2in1TabletCarWearable addSlot(type: SlotType): Promise 創(chuàng)建指定類型的通知渠道。使用Promise
    發(fā)表于 04-25 15:52

    京東方打造東北首個沉浸式數(shù)字藝術(shù)體驗空間

    2025年伊始,繼在蘇州、宜賓、北京(王府井)先后落地運營藝云數(shù)字藝術(shù)中心后,BOE(京東方)打造的第四家藝云數(shù)字藝術(shù)中心,也是東北首個全場景沉浸式數(shù)字藝術(shù)體驗空間——京東方醉?遼寧藝云數(shù)字
    的頭像 發(fā)表于 04-07 11:51 ?1307次閱讀