分享 node 面试题
这题 es7 解法!
let sleep = [];
for (var i = 0; i < 5; i++) {
((j) => {
sleep.push(new Promise(function (resolve, reject) {
setTimeout(function () {
console.log(new Date, j);
resolve();
}, j * 1000)
}))
})(i)
}
// await只能使用在原生语法
(async () => {
for (let item of sleep) {
await item
}
console.log(new Date(), i);
})();
6 回复
你这样写感觉有点奇怪, 不知我这样写怎么样?
let sleep = [];
for (var i = 0; i < 5; i++) {
((j) => {
sleep.push(new Promise(function (resolve, reject) {
setTimeout(function () {
console.log(new Date, j);
resolve();
}, j * 1000)
}))
})(i)
}
(async () => {
await Promise.all(sleep);
console.log(new Date(), i);
})();
那样写的话输出是0->1->2->3->4,5吧
0->1->2->3->4->5的话
const sleep = (time, i) => new Promise((resolve, reject) => {
setTimeout(() => {
console.log(new Date, i);
resolve();
},time);
});
(async () => {
let i = 0;
for (; i < 5; i++) {
await sleep(1000, i);
}
setTimeout(() => {
console.log(new Date, i);
}, 1000);
})();
@dislido 你说的对
都es7,你这个写法还是不够精简 let sleep = []; for (let i = 0; i < 5; i++) { sleep.push(new Promise(function (resolve, reject) { setTimeout(()=> { console.log(new Date, j); resolve();}, j * 1000) })) } (async () => { await Promise.all(sleep); console.log(new Date(), i); })();
let 拥有块级作用域,就不用你那样别扭的写法了
@fantasticsoul 第二部分的console.log(new Date(), i);
,i 呢?而且块级作用域是 es6 规范。我看了半天没想到面试官想考什么。