• 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  一样

      

  • 相关阅读:
    http协议详谈
    配置nginx 反向代理
    利用background-positon,background-image ,实现背景渐变
    vue +webpack 打包配置优化
    记项目中易出现的bug点
    vue 中基于html5 drag drap的拖放
    vue 项目技巧
    完整项目搭建全过程(vue-cli+webpack)
    vue+ D3+drag
    项目总结(3.28)
  • 原文地址:https://www.cnblogs.com/liujzcom/p/9490636.html
Copyright © 2020-2023  润新知