es6 --- Promise封裝讀取文件操作

Promise:

  • es6中為了解決回調地獄問題而產生的

Promise的參數

  • Promise的參數是一個函數.
  • 每個Promise在實例化時,都會立即執行參數里的函數
const p = new Promise(()=>{console.log(1);
})// 解釋了上面的第2條

在這里插入圖片描述

Promise參數的參數

  • Promise的參數(函數),默認有2個參數(resolve,reject).譯為:成功的回調、失敗的回調
  • 每個Promise實例都可以通過.then方法傳入,成功的回調和失敗的回調
// 先假設拿到了數據
const p = new Promise((resolve,reject)=>{setTimeout(()=>{const data = 'async resolve data';resolve(data);},1000);
});// 使用異步得到的data,通過.then()方法傳入回調函數
p.then((data)=>{console.log(data);
})

在這里插入圖片描述

封裝異步讀取文件操作

  • fs.readFile()方法用于異步讀取文件(node核心模塊)
  • 將Promise的實例對象作為函數的返回值返回
  • 這樣函數執行完畢后就得到一個Promise對象的實例,可以通過.then方法傳入成功的回調和失敗的回調
const fs = require('fs');
const path = require('path');function asyncGetFileByPath(p) {return new Promise((resolve, reject) => {// Promise對象里面的參數,會立即執行(前面說過)fs.readFile(path.join(__dirname, p), 'utf-8', (err, data) => {if (err) {reject(err);} else {resolve(data);}})})
}
asyncGetFileByPath('./files/1.txt').then((data) => { // 成功的回調console.log(data);},(err) => { // 失敗的回調console.error(err);})

在這里插入圖片描述
在這里插入圖片描述

解決回調地獄

  • 前面已經成功的封裝了一個讀取文件的函數
  • 下面用它來體驗一下讀取多個文件
  • 我們在.then()方法中,第一個參數resolve()方法中,返回一個promise對象B.
  • 那么在執行.then()的resolve()方法完畢后,此時的執行環境是這個Promise的實例b
  • 可以通過b的.then()方法繼續傳入resolve取消回調地獄,讓代碼趨于扁平化
const fs = require('fs');
const path = require('path');function asyncGetFileByPath(p) {return new Promise((resolve, reject) => {// Promise對象里面的參數,會立即執行(前面說過)fs.readFile(path.join(__dirname, p), 'utf-8', (err, data) => {if (err) {reject(err);} else {resolve(data);}})})
}
asyncGetFileByPath('./files/1.txt').then((data) => { // 成功的回調    '1.txt'console.log(data); // 打印出 1.txt 數據return asyncGetFileByPath('./files/2.txt')},(err) => { // 失敗的回調console.error(err);}).then( // 成功的回調  '2.txt'(data) => {console.log(data); // 打印出 2.txt 中的數據return asyncGetFileByPath('./files/3.txt') // 繼續返回Promise對象的實例},(err) => {console.error(err);}).then((data) => { // 成功的回調 '3.txt'console.log(data); // 打印出 3.txt 中的數據},(err) => {console.error(err);})

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250738.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250738.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250738.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

匿名函數

匿名函數:lambda 函數 語法: lambda 參數1, 參數2 : 表達式 表達式即為返回值 例: result (lambda x, y: xy)(1.2) print(result) 例2: newFunc lambda x,y : xy print(newFunc(1,2) 例3: result sorted…

hdu-6165(tarjan+topusort)

題意:一個有向圖,無自環,無重邊,讓你判斷這個圖內的任意兩點是否有路; 解題思路:首先,判斷兩個點是否可達一般用出入度來判斷,如果在拓撲排序中同時有兩個及以上入度同時為零的點&am…

OPENCV-7 學習筆記

OPENCV-7 學習筆記 轉換圖像尺寸 resize函數。這是最直接的方式,yrUp( )、pyrDown( )函數。即圖像金字塔相關的兩個函數,對圖像進行向上采樣,向下采樣的操作。 圖像金字塔 類似于金字塔的形狀,將原始圖像以金字塔形狀的分辨率…

雜項:E-Learning

ylbtech-雜項:E-Learning1.返回頂部 1、E-Learning:英文全稱為(Electronic Learning),中文譯作“數字(化)學習”、“電子(化)學習”、“網絡(化)學…

css --- flex布局的應用(between)

between 想把發布時間放在左邊,點擊放在右邊 頁面結構如下: 可以看到發布時間和點擊是在類 .mui-ellipsis 下.使用css3的 flex 布局中的: space-between .mui-ellipsis{display: flex;justify-content: space-between; }

WeUI

介紹: WeUI是微信設計團隊為微信網站開發量身定做的微信類UI界面,旨在改善和規范微信用戶體驗。包括組分如button,cell,dialog,progress,toast,article,actionsheet,icon…

php中的json

php中的json函數主要有三個: 函數描述json_encode()對變量進行 JSON 編碼json_decode對 JSON 格式的字符串進行解碼,轉換為 PHP 變量json_last_error返回最后發生的錯誤 認識前提: {},花括號代表包裝的是一個對象數據&#xff0…

vue --- 全局配置過濾函數,使用moment函數來格式化時間

效果1 YYYY-MM-DD 效果2 YYYY-MM-DD HH:mm:ss 配置注意事項 由于時間格式化,在大多數頁面中都會用到,因此建議配置在全局中 使用moment函數 -> http://momentjs.cn/ npm 安裝 # 命令行 cnpm i moment -S在全局中配置 // main.js import moment from momentVue.f…

2018ICPC南京賽區網絡賽J Sum(素數篩+找規律)

素數篩鏈接:https://blog.csdn.net/dl962454/article/details/76595623 【題意】 f(i):能拆成兩個數的乘積,并且這兩個數要求沒有平方因子,并且兩個數的位置互換算兩種方案。 最后求f(1)f(2)f(3)...f(n)。 【解題思路】…

[UE4]C++中extern關鍵字淺談

變量聲明和變量是有區別的 extern int i; //只是聲明i而非定義i int j; //聲明而且還定義了j 任何一個顯式初始化的聲明都將成為定義,而不管有沒有extern,extern語句一旦變量賦予了初始值就變成了定義。 extern double pi3.1415926; //定義 stat…

PHP 計算兩個兩個文件的相對路徑

例: a‘/a/b/c/d/e.php′;a = ‘/a/b/c/d/e.php’; b ‘/a/b/12/34/c.php’; 二者的相對路徑結果為:/a/b/12/34/../../c/d/e.php //計算出$b相對于$a的相對路徑: function getRelativePath($a,$b){$returnPath array(dirname($b));$arrA explode(…

vue --- 使用vue-router獲取帶參數的路由

希望的效果如下: 2個路由: 點擊如下 步驟. 使用 router-link 來指定路由路徑在router.js中指定 路徑的 事件處理函數(對應的組件)創建對應的組件 router-link 找到一個區別各個列表的屬性(id),將其作為參數傳遞到路由中to是vue-router中用來綁定路由的屬性由于需要進行計…

.Net Core2.*學習手冊

1.net core 基礎知識解析(創建一個.net core網站)(視頻錄制) 1.1 Startup解析(沒寫)   1.2 目錄結構分析(沒寫)   1.3 使用靜態文件(沒寫)   1.4 Controller(沒寫)   1.5 Razor頁面(沒寫) 1.6.net core appsetting/獲取配置文件   2.創建.net core項目 2.1 創建一個項…

java中static詳解

這個博主寫的總結很好,這里附上鏈接http://www.cnblogs.com/dolphin0520/p/3799052.html 下面進行簡要總結: 在《Java編程思想》P86頁有這樣一段話: “static方法就是沒有this的方法。在static方法內部不能調用非靜態方法,反過來是可以的。而且可以在沒有…

PHP 實現中文截取無亂碼的方法

PHP 實現中文截取無亂碼的方法 需知: 中文字符在gbk編碼下為2個字符,utf-8下為3個字符中文字符的ASCII值是從0xa0后開始的通過ord()函數可以返回字符串中第一個字符的ASCII值,chr()函數作用相反 方法: function GBsubstr($str…

vue --- 全局注冊子組件,并導入全局的子組件

假設: 需要一個評論的模塊comment由于comment在多個頁面中可能會復用.于是創建一個comment.vue 步驟: 創建comment.vue在需要引用的位置使import comment from ../subcomponent/Comment.vue 導入子組件在Vue實例中使用components屬性注冊注冊的規則: “comment-box” : comm…

7. 反轉整數

7. 反轉整數 描述 給定一個 32 位有符號整數,將整數中的數字進行反轉。 示例 示例 1: 輸入: 123 輸出: 321 示例 2: 輸入: -123 輸出: -321 示例 3: 輸入: 120 輸出: 21 注意: 假設我們的環境只能存儲 32 位有符號整數,其數值范圍是 [?2^31, 2^31 ? 1]…

Laravel框架中的路由和控制器

路由 簡介: 將用戶的請求轉發給相應的程序進行處理作用:建立url和程序之間的映射請求類型:get、post、put、patch、delete目錄:app/http/routes.php基本路由:接收單種請求類型 //get請求 Route::get(hello1,function(…

小朋友學C++(1)

Hello World! 在學C之前&#xff0c;最好先學習一下C語言 讓我們先運行一段簡單的代碼&#xff0c;編譯器可以使用 在線C編譯器 或 Xcode(蘋果系統) 或Dev C&#xff08;Windows系統&#xff09;。 #include <iostream> using namespace std; int main() { cout <<…

mysql_表_操作

1、創建表 # 基本語法&#xff1a; create table 表名(列名 類型 是否可以為空 默認值 自增 主鍵&#xff0c;列名 類型 是否可以為空 )ENGINEInnoDB DEFAULT CHARSETutf8not null # 不可以為空 default 1 # 默認值為1 auto_increment # 自增 primary …