es6 promise 前凑
Posted liujzcom
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 一样
以上是关于es6 promise 前凑的主要内容,如果未能解决你的问题,请参考以下文章