// setTimeout(() => { // console.log(1) // setTimeout(() => { // console.log(2) // setTimeout(() => { // console.log(3) // setTimeout(() => { // console.log(4) // setTimeout(() => { // console.log(5) // }, 1000) // }, 1000) // }, 1000) // }, 1000) // }, 1000); var setTimeoutPromise = (time) => new Promise((resolve, reject) => { setTimeout(() => { resolve() }, time) }); // setTimeoutPromise(1000). // then(() => { console.log(1); return setTimeoutPromise(1000) }). // then(() => { console.log(2); return setTimeoutPromise(1000) }). // then(() => { console.log(3); return setTimeoutPromise(1000) }). // then(() => { console.log(4); return setTimeoutPromise(1000) }). // then(() => { console.log(5)}); var task = async (count) => { for (var i = 1; i <= count; i++) { await setTimeoutPromise(1000); console.log(i); } } async function taskAll(){ await task(20); console.log('task Finish'); } taskAll(); // 协程->线程->进程 // JS 单线程异步非阻塞模型 // EventLoop来实现它 // function timeOutTrunk(time) { // return (cb) => { // setTimeout(cb, time, time); // } // } // var gen = function* () { // var f1 = yield timeOutTrunk(1000); // console.log(f1); // var f2 = yield timeOutTrunk(f1 + 1000); // console.log(f2); // } // var g = gen(); // var result = g.next(); // result.value((time) => { // var r = g.next(time); // r.value((time) => { // var _r = g.next(time); // console.log(_r.done); // }) // }) // TODO:如何用递归来实现一个自动化的执行器? // var a = new Promise((resolve, reject) => { // setTimeout(() => { // resolve('yeah') // }, 1000); // }); // var b = (value) => { // return new Promise((resolve, reject) => { // setTimeout(() => { // resolve('b!'); // }, 3000); // }) // } // // a.then(b).then((v) => { console.log('yeah!') }); // // Promise.all([a, b()]).then(v => console.log(v)); // Promise.race([a, b()]).then(v => console.log(v));