携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情
回顾:前期在浏览器的章节,学习了浏览器的对象、关于DOM的基础和操作表单知识。本期关注“浏览器事件的执行限制”。
浏览器事件,都必须是异步执行
由于JS所有代码都是单线程执行,浏览器事件,都必须是异步执行。异步执行可以用回调函数
例如:
function callback() {
console.log('finish');
}
console.log('before setTimeout()');
setTimeout(callback, 1000); // 1秒钟后调用callback函数
console.log('after setTimeout()');
before setTimeout()
after setTimeout()
//1秒钟后出现finish
从实际运行的情况来看,异步操作会在某个时间点触发一个函数进行调用
什么是“Promise”
JavaScript中称“承诺将来会执行”的对象”为Promise对象
廖老师给了个简单的Promise例子:生成一个0-2之间的随机数,如果小于1,则等待一段时间后返回成功,否则返回失败。然后可以用一个Promise对象来执行它,并在将来某个时刻获得成功或失败的结果。
function test(resolve, reject) {
var timeOut = Math.random() * 2;
log('set timeout to: ' + timeOut + ' seconds.');
setTimeout(function () {
if (timeOut < 1) {
log('call resolve()...');
resolve('200 OK');
}
else {
log('call reject()...');
reject('timeout in ' + timeOut + ' seconds.');
}
}, timeOut * 1000);
}
var p1 = new Promise(test);
var p2 = p1.then(function (result) {
console.log('Done:' + result);
});
var p3 = p2.catch(function (reason) {
console.log('Failed:' + reason);
});
也就是说,会有以下2种结果:
// 如果成功,执行这个函数:
p1.then(function (result) {
console.log('成功:' + result);
});
//如果失败,告诉promise对象
p2.catch(function (reason) {
console.log('失败:' + reason);
});
在廖老师的论坛随机run了一次,结果是.....也就是对应timeout<1的情况,显示Done:200 OK
可见Promise最大的好处是在异步执行的流程中,把执行代码和处理结果的代码清晰地分离了
(例题及图片参考来源于:www.liaoxuefeng.com/wiki/102291…
Promise甚至还可以做更多的事情。下次我们来分析:若干个一步任务,如何不在写“一层层嵌套代码”的情况下,保障任何任务失败则不再继续并执行错误处理函数~
写在最后
以上习题&笔记从大佬们的论坛学习而来,特感谢大佬们的知识分享~ (学习技术知识,果然要看大佬们的技术博客,大家有好的推荐也欢迎指引我这个小白哈,感恩!)
附上学习链接,感谢廖大神出题和解答: