es6 promise 前湊
阿新 • • 發佈:2018-08-17
mes return read push 方法 我們 回調 time ava
/**
*@ promise前湊
*@ promise 好處:
*@ 1.可以解決一些異步問題(異步回調--回調地獄,回調的嵌套關系)
*
*/
//需求 當異步讀取2個文件完成後 多個回調同步結果的情況 ,(需要讀取a和b 等2個文件,當讀取完後需要顯示)(a.txt 裏 hello ; b.txt 裏 word)
//方法1 使用回調函數 callback, 當我們讀取完後 判斷是不是讀取2次,如果是就顯示
let fs = require("fs"); //我們 可以先定義一個 after 方法,判斷2次執行完顯示結果 function after(times, callback) { let arr=[]; return function (data) { arr.push(data); //如果執行完2次 顯示結果 if (--times == 0){ callback(arr); } } } let fn =after(2,function (data) { console.log(data); }); fs.readFile("a.txt", "utf8", function (err, data) { fn(data) }); fs.readFile("b.txt","utf8",function (err, data) { fn(data) });
//執行後 查看控制臺 ===》[ ‘hello‘, ‘Word‘ ]
// 方法2 使用 發布訂閱 模式 發布訂閱 發布(發布時一次執行) 訂閱(先把他暫存起來)
let fs = require("fs"); let event = { arr: [], result: [], on(fn) { this.arr.push(fn); }, emit(data) { this.result.push(data); this.arr.forEach(fn=>fn(this.result)); } }; event.on(function (data) {if(data.length==2){ console.log(data);//這是最終輸出的結果 } }) fs.readFile("a.txt","utf8",function (err,data) { event.emit(data); }) fs.readFile("b.txt","utf8",function (err,data) { event.emit(data); })
輸出的結果 和方法1 一樣
es6 promise 前湊