es7 async和await ,作为genertor函数语法糖,在使用上比generator函数方便的,Generator 函数就是一个封装的异步任务,或者说是异步任务的容器。异步操作需要暂停的地方,都用yield语句注明.

  generator将异步的流程标记的很简洁,但是流程执行却并不方便,所有我们需要借助Generator的自执行下函数。Thunk 函数可以用于generator函数的自流程管理

   async和await 作为generator的语法糖,自带自执行器,相对于generator具有更好的语义,yield后面只能时promise,async,await 具有更好的适用性,并不明确规定是promise,async的返回的是promise

  1.asycn和await的基本使用

    async如果遇到await就会等待,等待其执行结果,才会往下继续执行函数内部语句

/* 异步执行方法 */
function timeout(ms) {
    return new Promise((res)=>{
        console.log('settimeout')
        setTimeout(res,ms)
    })
}
/* await 只能在async定义的函数内部使用 */
async function asyncpriint(value,ms) {
    timeout(ms);
    console.log(value);
}
asyncpriint('hello world',2000);
// 先输出settimeout等待2m钟输出hello world
// 如果去掉await,输出settimeout并且不等待直接输出hello world

  async函数返回的是一个promise

/* async返回时最终会转成一个promise */
async function donow() {
    return 'czklove'
}
async function donow2 () {
    return new Promise(res=>{
        res('czklove')
    })
}
async function donow3 () {
    return Promise.resolve('czklove')
}
donow().then((val)=>{
    console.log(val)
})
// 输出czklove
donow2().then((val)=>{
    console.log(val)
})
// 输出czklove
/* 2和3是等价的,Promise.resolve 返回一个promise */
donow3().then((val)=>{
    console.log(val)
})
//输出czklove
// 输出输出czklove
/* donow和donow2是等价的
    也就是说返回值是一个值的话,他会自动转化成promise
 */
View Code

相关文章:

  • 2021-08-31
  • 2021-09-10
  • 2022-12-23
  • 2022-12-23
  • 2021-03-27
  • 2021-08-07
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-23
  • 2022-12-23
  • 2021-07-18
  • 2022-12-23
  • 2022-12-23
  • 2021-10-03
  • 2021-06-04
相关资源
相似解决方案