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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

引言:從單線程的困境說(shuō)起

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

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

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

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

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

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

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

javascript
 體驗(yàn)AI代碼助手
 代碼解讀
復(fù)制代碼
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的誕生:異步任務(wù)同步化

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

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

javascript
 體驗(yàn)AI代碼助手
 代碼解讀
復(fù)制代碼
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)鍵點(diǎn)在于:Promise的executor函數(shù)((resolve) => {...})是同步立即執(zhí)行的,但內(nèi)部的異步操作(如setTimeout)仍然是異步的。

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

Promise的核心思想可以用一個(gè)生活比喻來(lái)理解:它就像你在餐廳點(diǎn)餐后拿到的一個(gè)取餐號(hào)碼。餐廳(JavaScript引擎)承諾(Promise)會(huì)在餐點(diǎn)準(zhǔn)備好時(shí)通知你,而你不需要在柜臺(tái)前干等。

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

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

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

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

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

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

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

Promise的威力:鏈?zhǔn)秸{(diào)用與組合

Promise的真正強(qiáng)大之處在于其鏈?zhǔn)秸{(diào)用能力。文檔4(4.html)展示了如何使用Promise處理網(wǎng)絡(luò)請(qǐng)求:

ini
 體驗(yàn)AI代碼助手
 代碼解讀
復(fù)制代碼
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返回一個(gè)Promise,.then(data => data.json())處理響應(yīng)體,再下一個(gè).then處理解析后的JSON數(shù)據(jù)。每個(gè).then返回的值會(huì)成為下一個(gè).then的參數(shù),或者可以返回一個(gè)新的Promise。

Promise在現(xiàn)代開(kāi)發(fā)中的應(yīng)用

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

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

代碼可讀性提升:鏈?zhǔn)秸{(diào)用讓異步流程一目了然

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

從Promise到async/await:異步編程的進(jìn)化

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

javascript
 體驗(yàn)AI代碼助手
 代碼解讀
復(fù)制代碼
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é)語(yǔ):掌握異步,駕馭現(xiàn)代Web開(kāi)發(fā)

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

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

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

審核編輯 黃宇

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

    關(guān)注

    0

    文章

    526

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

    HarmonyOS入門指南

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

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

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

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

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

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)-Notification Kit(用戶通知服務(wù))notificationManager.requestEnableNotification(deprecated)

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

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)-Notification Kit(用戶通知服務(wù))notificationManager.setBadgeNumber10+

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

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

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

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)-Notification Kit(用戶通知服務(wù))notificationManager.isDistributedEnabled

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

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)-Notification Kit(用戶通知服務(wù))notificationManager.getSlots

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

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)-Notification Kit(用戶通知服務(wù))notificationManager.getSlot

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

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)-Notification Kit(用戶通知服務(wù))notificationManager.getActiveNotifications

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

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

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

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)-Notification Kit(用戶通知服務(wù))notificationManager.cancelAll

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

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)-Notification Kit(用戶通知服務(wù))notificationManager.addSlot

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

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

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