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

      

  • 相关阅读:
    弱省胡策 Magic
    CF917D Stranger Trees
    【弱省胡策】Round #5 Count
    【BZOJ2117】 [2010国家集训队]Crash的旅游计划
    「2017 山东一轮集训 Day5」苹果树
    【SDOI2017】天才黑客
    【JXOI2018】守卫
    小程序两种图片加载方式
    小程序之底部栏设计
    小程序之全局变量的设置及使用
  • 原文地址:https://www.cnblogs.com/liujzcom/p/9490636.html
Copyright © 2011-2022 走看看