异步方案

95 阅读1分钟

异步方案

1 Generator 生成器函数

生成器函数在语法上 其实就是比 普通函数 多了一个 * 号  function * foo(){}
  • 生成器函数方法
next() 我们需要调用这个对象的 next 方法 这个函数的函数体才会执行

throw() 这个方法可以对生成器函数内部 抛出一个异常 我们可以通过  
    try {}catch(e){console.log(e)} 来捕获异常
  • 生成器中发关键字 yield
1.当一个生成器函数被调用时,它会一直执行直到遇到一个 yield 关键字。yield关键字不会像 return 一样 
终止当前函数的执行 而是会暂停当前函数的执行,直到我们外界再次调用 next 方法执行 该函数。

2.在第二次调用的 next 方法的时候 我们传入一个参数的话 这个参数会作为 yield 这个语句 的返回值
  • 生成器中发返回值
在返回的对象里面 {value'foo'donefalse}  有一个 done 属性 表示当前的生成器是否已经全部执行完成了

2 Async/ Await 语法糖

  • 使用
使用上 我们把一个普通函数用 async 修饰的普通函数 在函数内部呢 把异步的方法用 await 关键字

async function  main() {
  try {
    const api = await ajax('../api/api.json')
    console.log(api);
    const user = await ajax('../api/user.json')
    console.log(user);
  } catch (error) {
    console.log(error);
  }
}
main()
  • Async 函数可以给我们返回一个 Promise 函数
async function  main() {
  try {
    const api = await ajax('../api/api.json')
    return api
  } catch (error) {
    console.log(error);
  }
}
const prm = main()
prm.then((res)=>{
  console.log(res,'回调');
})