不得不承认,这种做法虽粗暴有效,然则不算是能额外加分的筹划。如不雅把此次的需求抽象为:在系列异步操作完成(每次轮回都产生了 1 个异步操作)之后,再做其他的工作,代码该怎么组织?聪慧的你是不是想起了什么?对,就是 Promise。
可能有的同窗会问,不就是在控制台输出几个数字么?至于如许杀鸡用牛刀?你要知道,面试官真正想考察的是候选人是否具备某种才能和本质,因为在现代的前端开辟中,处理异步的代码到处可见,熟悉和控制异步操作的流程控制是成为合格开辟者的根本功。
顺着下来,不难给出基于 Promise 的解决筹划(既然 Promise 是 ES6 中的新特点,我们的新代码应用 ES6 编写是不是会更好?如不雅你这么写了,大年夜概率会让面试官心生好感):
- const tasks = [];
- for (var i = 0; i < 5; i++) { // 这里 i 的声明不克不及改成 let,如不雅要改该怎么做?
- ((j) => {
- tasks.push(new Promise((resolve) => {
- setTimeout(() => {
- console.log(new Date, j);
- resolve(); // 这里必定要 resolve,不然代码不会按预期 work
- }, 1000 * j); // 准时器的超不时光慢慢增长
- }));
- })(i);
- }
- Promise.all(tasks).then(() => {
- setTimeout(() => {
- console.log(new Date, i);
- }, 1000); // 留意这里只须要把超时设置为 1 秒
- });
比拟而言,笔者更偏向于下面如许看起来更简洁的代码,要知道编程风格也是很多面试官重点考察的点,代码浏览时的颗粒度更小,模块化更好,无疑会是加分点。
- const tasks = []; // 这里存放异步操作的 Promise
- const output = (i) => new Promise((resolve) => {
- setTimeout(() => {
推荐阅读
$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \ -Dexec.args="--runner=SparkRunner --inputFile=pom.xml --output=counts" -Pspark-runner 1.概述在大>>>详细阅读
本文标题:80%应聘者都不及格的JS面试题
地址:http://www.17bianji.com/lsqh/34710.html
1/2 1