国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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 不等, 單線程腳本語言”,它的簡單性使得初學(xué)者易于上手,但也帶來了一個核心挑戰(zhàn):如何在不阻塞主線程的前提下處理耗時任務(wù)?

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

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

為了解決這個問題,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ì):耗時任務(wù)被放入"事件循環(huán)"(event loop)中,主線程繼續(xù)執(zhí)行后續(xù)代碼,等到適當(dāng)時候再回來處理異步結(jié)果。文件I/O操作也是如此,如文檔3(3.js)所示,fs.readFile讀取文件時不會阻塞后續(xù)的console.log(2)。

然而,回調(diào)函數(shù)帶來了新的問題——"回調(diào)地獄"。多個異步操作嵌套時,代碼會變得難以閱讀和維護(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正是為了解決這個問題,正如文檔2(2.html)標(biāo)題所言:"異步,變同步"。Promise不是一個具體的異步操作,而是一個管理異步操作的高級工具類

文檔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的核心思想可以用一個生活比喻來理解:它就像你在餐廳點(diǎn)餐后拿到的一個取餐號碼。餐廳(JavaScript引擎)承諾(Promise)會在餐點(diǎn)準(zhǔn)備好時通知你,而你不需要在柜臺前干等。

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

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

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

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

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

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);  // 失敗時調(diào)用reject
            return;
        }
        resolve(data.toString());  // 成功時調(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ò)請求:

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返回一個Promise,.then(data => data.json())處理響應(yīng)體,再下一個.then處理解析后的JSON數(shù)據(jù)。每個.then返回的值會成為下一個.then的參數(shù),或者可以返回一個新的Promise。

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

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

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

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

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

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

值得一提的是,Promise為更現(xiàn)代的async/await語法奠定了基礎(chǔ)。async/await讓異步代碼看起來和同步代碼幾乎一樣,進(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é)語:掌握異步,駕馭現(xiàn)代Web開發(fā)

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

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

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

審核編輯 黃宇

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

    關(guān)注

    0

    文章

    526

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    HarmonyOS入門指南

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

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

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

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

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

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

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

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

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

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

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

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

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

    HarmonyOS NEXT應(yīng)用開發(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)用開發(fā)-Notification Kit(用戶通知服務(wù))notificationManager.getSlot

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

    HarmonyOS NEXT應(yīng)用開發(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中,可以使用文件管理對文件進(jìn)行基礎(chǔ)的操作

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

    HarmonyOS NEXT應(yīng)用開發(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)用開發(fā)-Notification Kit(用戶通知服務(wù))notificationManager.addSlot

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

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

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