zoukankan      html  css  js  c++  java
  • es6 promise 前凑

    /**
    *@ 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  一样

      

  • 相关阅读:
    bzoj2006[NOI2010]超级钢琴
    bzoj1088[SCOI2005]扫雷
    bzoj1207[HNOI2004]打鼹鼠
    bzoj2132圈地计划
    bzoj2127happiness
    bzoj1037[ZJOI2008]生日聚会
    bzoj1031[JSOI2007]字符加密
    bzoj1566[noi2009]管道取珠
    bzoj2134单选错位
    vuejs之v-on小例子之实现购买数量的增加和减少
  • 原文地址:https://www.cnblogs.com/liujzcom/p/9490636.html
Copyright © 2011-2022 走看看