Generator和async|Generator和async await

es6提供的这两玩意,看明白了,用着用着又糊涂了....
下面就几个例子讲一下
示例1

async function a(){ await setTimeout('console.log(1)', 1000) console.log(2) }

输出结果
2 1

示例2
async function a(){ await new Promise(resolve=>{ setTimeout(()=>{ console.log(1); resolve() }, 1000) }) console.log(2) }

输出结果
1 2

总结
之前没仔细看文档,老感觉为啥promise的setTimeout能阻塞执行,而直接setTimeout不行。
  • yield命令后面只能是 Thunk 函数或 Promise 对象
  • async函数的await命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时等同于同步操作)
【Generator和async|Generator和async await】async是Generator的语法糖,进一步说,async函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而await命令就是内部then命令的语法糖。
这么解释一下感觉就清晰多了。

    推荐阅读