什么是语法糖
在编程中,用更简练的语言表达复杂的含义。在得到大家默认的广泛的认可的时候,就是约定俗成的时候,可以提升交流的效率。
async 和await VS generator函数
async 和await
他们是成对配合出现的。async 和await 是generator的语法糖。
async 和await作为语法糖,一个是内置了执行器,它不用我们再去调用generator函数返回值的next方法。
第二,async+await比起我们写星号和yield,更加语意化。async表示函数里面有异步操作。await表示后面的表达式需要等待结果。
写的方式就相当于把异步变成了同步的写法。
第三,async函数的返回值是一个promise对象,而generator的返回值是一个迭代器对象要方便,primise对象可以直接用then方法去指定下一步的操作。
await后面,可以是promise对象,也可以是原始类型的值,如果是原始类型的值,await会自动把这个值转为执行成功resolve的promise对象,并且把值传递给resolve。
async function getValue(){
let res = await 123
return res
}
getValue().then(res=>{
console.log(res)
})
了解promise A+ 规范
pomise状态
promise对象代表一个异步操作,有三种状态,pending(进行中)fulfilled(成功),reject(失败),只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。
一旦状态改变,就不会再变,任何时候都可以得到这个结果。也就是说,promise状态的改变,只有两种可能,从pending变为fulfilled,或者从pending变为reject
then方法
一个promise必须提供一个then方法,用来获取当前异步操作的value或者error
一个promise的then方法接受两个参数,promise.then(onFulfilled,onRejected)
then方法返回的是一个新的promise实例,因此支持链式写法,也就是then后面可以接着写then