1. 程式人生 > >es6 promise 前湊

es6 promise 前湊

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 前湊