码迷,mamicode.com
首页 > 其他好文 > 详细

es6 promise 前凑

时间:2018-08-16 23:48:39      阅读:370      评论:0      收藏:0      [点我收藏+]

标签:after   adf   class   情况   ==   log   cti   异步   utf8   

/**
*@ 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 前凑

标签:after   adf   class   情况   ==   log   cti   异步   utf8   

原文地址:https://www.cnblogs.com/liujzcom/p/9490636.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!