丁鹿学堂:promise的A+规范简要分析

88 阅读2分钟
什么是语法糖

在编程中,用更简练的语言表达复杂的含义。在得到大家默认的广泛的认可的时候,就是约定俗成的时候,可以提升交流的效率。

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