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

溫馨提示×

溫馨提示×

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

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

Node.js中ES6模塊化及Promise對象怎么使用

發布時間:2022-07-04 11:54:43 來源:億速云 閱讀:180 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Node.js中ES6模塊化及Promise對象怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Node.js中ES6模塊化及Promise對象怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

ES6模塊化

CommonJS 規范

node.js 遵循了 CommonJS 的模塊化規范。其中:

  • 導入其它模塊使用 require()方法

  • 模塊對外共享成員使用 module.exports 對象

模塊化開發好處

模塊化開發的好處有很多,其中:

  • 實現了在JS文件中引用其他文件

  • 避免命名沖突的問題

  • 大家都遵守同樣的模塊化規范寫代碼,降低了溝通的成本,極大方便了各個模塊之間的相互調用

  • 只需關心當前模塊本身的功能開發,需要其他模塊的支持時,在模塊內調用目標模塊即可

模塊化規范劃分

在 ES6 模塊化規范誕生之前,JavaScript 社區已經嘗試并提出了 AMD 、 CMD 、 CommonJS 等模塊化規范。 但是,這些由社區提出的模塊化標準,還是存在一定的差異性與局限性、并不是瀏覽器與服務器通用的模塊化標準

  • AMD 和 CMD 適用于瀏覽器端的 Javascript 模塊化

  • CommonJS 適用于服務器端的 Javascript

模塊化太多的模塊化規范給開發者增加了學習的難度與開發的成本。因此,官方的 ES6 模塊化規范誕生了!

ES6模塊化開發注意點

node.js 中默認僅支持 CommonJS 模塊化規范,若想基于 node.js 體驗與學習 ES6 的模塊化語法,需要按照如下兩個步驟進行配置:

  • 確保安裝了 v13.0.0 或更高版本的 node.js

  • 在 package.json 的根節點中添加 "type": "module" 節點

  • 配置之后,則只能使用ES6模塊化語法,不能再使用CommonJS語法了

ES6 導入導出

主模塊:

// //導入子模塊
// //方法1.默認導入  不能解構接收
// import obj from './02-子模塊.js'
// console.log(obj);
// //不能再接收位置直接解構
//import { fn, num } from './02-子模塊.js'
//方法2.按需導入
// import { str, fn2 } from './02-子模塊.js'
// console.log(str);
// fn2
//import bbb from './02-子模塊.js'
//方法3.只導入 不接收 使用的是功能
import './02-子模塊.js'
//es6也有緩存機制

子模塊:

//導出內容
//方法1.默認導出一次  不允許導出多次
// const num = 123
// function fn() {
//   console.log('我是函數fn');
// }
// export default { fn, num }

//方法2.按需導出  可以導出多次
//必須定義的時候就導出
// export const str = 'abc'
// export function fn2() {
//   console.log('我是函數fn2');
// }

//方法3.不導出任何數據  讓別人使用自己的功能
for (let i = 0; i < 3; i++) {
  console.log('重要的事情說三遍!');
}

Promise對象

異步操作是 JavaScript 編程的麻煩事,麻煩到一直有人提出各種各樣的方案,試圖解決這個問題。早期使用回調函數處理異步編碼,但存在回調地獄的問題。ES6中,新增了Promise 對象,從此異步編程擺脫了回調函數的束縛。

使用語法

let p = new Promise((resolve, reject) => {
    // ... some code
    if (/* 異步操作成功 */) {
        resolve(value);
    } else {
        reject(error);
    }
});

注意點:

  • new Promise()

  • 必須傳入一個函數作為Promise的參數,這個函數在 new Promise的時候就會執行

  • 函數有 resolve 和 reject 兩個形參

  • 函數就相當于一個容器,可以將異步任務放到這里

  • 將異步任務成功的結果傳給 resolve 函數;將失敗的信息傳給 reject 函數

p.then(
    result => { /* 獲取成功的結果 */ }
);
// 或者
p.then(
    result => { /* 獲取成功的結果 */ },
    err => { /* 獲取失敗的結果 */ }
);
// 或者
p.then(
    result => { /* 獲取成功的結果 */ }
).catch(
    err => { /* 獲取失敗的結果 */ }
);

注意點:

  • then方法接收以個函數類型的參數,只處理成功

  • then方法接收兩個函數類型的參數,分別用于接收 resolve 的值 和 reject 的值

  • then方法也可以只接收一個參數,表示只接收 resolve 的值,失敗的結果可以通過鏈式調用catch方法捕獲

Promise中的同步異步

new Promise 和 new 其他對象一樣,是同步任務。

獲取結果時(調用 resolve 觸發 then方法時)是異步的。

Promise 封裝

// 封裝
function myReadFile(filename) {
    return new Promise((resolve, reject) => {
        fs.readFile(filename, 'utf-8', (err, data) => {
            err ? reject(err) : resolve(data.length);
        })
    });
}
// 調用
myReadFile('./files/a.txt')
    .then(a => {
        console.log(a);
        return myReadFile('./files/b.txt');
    })
    .then(b => {
        console.log(b);
        return myReadFile('./files/c.txt');
    })
    .then(c => {
        console.log(c)
    })

第三方then-fs解決回調地獄

// npm  i  then-fs
const fs = require('then-fs');
fs.readFile('./files/a.txt', 'utf-8')
    .then(res1 => {
        console.log(res1);
        return fs.readFile('./files/b.txt', 'utf-8')
    })
    .then(res2 => {
        console.log(res2);
        return fs.readFile('./files/b.txt', 'utf-8')
    })
    .then(res3 => {
        console.log(res3)
    })

注意:未來很多模塊支持Promise對象開發,就是返回的是一個Promise對象; 如 axios

讀到這里,這篇“Node.js中ES6模塊化及Promise對象怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

门源| 安顺市| 汝阳县| 金湖县| 兴宁市| 常山县| 仁布县| 涡阳县| 台东市| 中山市| 诸暨市| 江油市| 固安县| 应城市| 黑水县| 德钦县| 景东| 东乡族自治县| 中阳县| 青阳县| 额尔古纳市| 淮南市| 固阳县| 邯郸市| 长武县| 郁南县| 颍上县| 林西县| 左贡县| 沈丘县| 收藏| 田林县| 济南市| 秦皇岛市| 乐东| 宣威市| 建昌县| 安多县| 凤城市| 南乐县| 黄大仙区|