ES6 -- Promise初探
程序员文章站
2022-06-13 15:52:29
...
Promise铺垫
异步编程:无论是在浏览器环境还是在node环境中,我们都会使用JavaScript完成各种异步操作,如浏览器环境中的定时器、事件、ajax等或是node环境中的文件读取、事件等。伴随着异步编程的就是回调机制,异步编程避免不了回调。
异步编程问题:
- 产生回调地狱,难于维护和扩展
- try catch只能捕获同步代码中出现的异常
- 同步并发的异步存在一定的问题
// 在node里面跑,回调地狱
let fs = require('fs');
fs.readFile('./xxx', 'utf-8', (err, data) => {
data && fs.readFile('./xxx', 'utf-8', (err, data) => {
data && fs.readFile('./xxx', 'utf-8', (err, data) => {
console.log(data);
});
});
});
// try catch
try {
setTimeout(() => {
console.log(a); // 报错,try catch捕获不到
});
} catch(e) {
console.log(e);
}
setTimeout(() => {
try {
console.log(a);
} catch (e) {
console.log(e); // 捕获到异常
}
});
// 异常弥补
// 浏览器
// 同步并发
let oStudent = {
}
function show (data) {
console.log(data);
}
var fs = require('fs');
// 三个文件全部读取完毕后调用show
fs.readFile('./data/name.txt', 'utf-8', (err, data) => {
if(data) oStudent.name = data;
Store.fire(oStudent);
});
fs.readFile('./data/number.txt', 'utf-8', (err, data) => {
if(data) oStudent.number = data;
Store.fire(oStudent);
});
fs.readFile('./data/score.txt', 'utf-8', (err, data) => {
if(data) oStudent.score = data;
Store.fire(oStudent);
});
// 订阅模式
let Store = {
list: [],
times: 3,
subscribe (func) {
this.list.push(func);
},
fire (...arg) {
--this.times == 0 && this.list.forEach((ele) => {
ele.apply(null, arg);
});
}
}
Store.subscribe(show);
上一篇: js 程序执行与顺序实现详解_javascript技巧
下一篇: 初探ES6(1)...