您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Node.js中ES6模塊化及Promise對象怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Node.js中ES6模塊化及Promise對象怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
node.js 遵循了 CommonJS 的模塊化規范。其中:
導入其它模塊使用 require()方法
模塊對外共享成員使用 module.exports 對象
模塊化開發的好處有很多,其中:
實現了在JS文件中引用其他文件
避免命名沖突的問題
大家都遵守同樣的模塊化規范寫代碼,降低了溝通的成本,極大方便了各個模塊之間的相互調用
只需關心當前模塊本身的功能開發,需要其他模塊的支持時,在模塊內調用目標模塊即可
在 ES6 模塊化規范誕生之前,JavaScript 社區已經嘗試并提出了 AMD 、 CMD 、 CommonJS 等模塊化規范。 但是,這些由社區提出的模塊化標準,還是存在一定的差異性與局限性、并不是瀏覽器與服務器通用的模塊化標準
AMD 和 CMD 適用于瀏覽器端的 Javascript 模塊化
CommonJS 適用于服務器端的 Javascript
模塊化太多的模塊化規范給開發者增加了學習的難度與開發的成本。因此,官方的 ES6 模塊化規范誕生了!
node.js 中默認僅支持 CommonJS 模塊化規范,若想基于 node.js 體驗與學習 ES6 的模塊化語法,需要按照如下兩個步驟進行配置:
確保安裝了 v13.0.0 或更高版本的 node.js
在 package.json 的根節點中添加 "type": "module" 節點
配置之后,則只能使用ES6模塊化語法,不能再使用CommonJS語法了
主模塊:
// //導入子模塊 // //方法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('重要的事情說三遍!'); }
異步操作是 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方法捕獲
new Promise 和 new 其他對象一樣,是同步任務。
獲取結果時(調用 resolve 觸發 then方法時)是異步的。
// 封裝 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) })
// 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對象怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。