
new Promise(function(resolve) { resolve(console.log(1)) }).then(function() { console.log(2) }) console.log(3) setTimeout(function() { console.log(4) }, 0) 想请教下 2 为什么一定会比 4 先输出,自己缺失了哪方面的知识。。
1 afpro 2018-04-25 10:19:20 +08:00 你在最后一行加一个 console.log(5) 再看一下结果应该就想明白了 |
2 afpro 2018-04-25 10:21:06 +08:00 顺带科普一个常识 现有的 Javascript 解释器都是单线程的 |
3 momocraft 2018-04-25 10:29:58 +08:00 eventloop / task queue 理论上这是给浏览器用的标准 ( HTML5 ),实际上大家都和浏览器做得差不多。 |
4 zhengxiaowai 2018-04-25 10:34:54 +08:00 |
5 denano OP |
6 autoxbc 2018-04-25 10:57:29 +08:00 via iPhone Promise 的构造函数是同步代码,then 方法的回调函数是异步代码,异步代码按照抛出他们的同步代码的顺序加入队列 同步异步单线程这些是 js 基础,高级程序设计里有; Promise 原理可以看 Promise 小书,不过小书对两者的返回值讲的不清楚,还要看一下 MDN; 最后可以看 Promise 规范,有完整中文版 |
7 sujin190 2018-04-25 11:29:53 +08:00 而且 setTimeout 实际是有最小延时时间的,并不能是 0,好像是 4ms 吧 |
8 chairuosen 2018-04-25 11:35:39 +08:00 |
9 kisnows 2018-04-25 14:23:45 +08:00 看一下 event loop 方面的知识就清楚了。 |