异步方案
1 Generator 生成器函数
生成器函数在语法上 其实就是比 普通函数 多了一个 * 号 function * foo(){}
next() 我们需要调用这个对象的 next 方法 这个函数的函数体才会执行
throw() 这个方法可以对生成器函数内部 抛出一个异常 我们可以通过
try {}catch(e){console.log(e)} 来捕获异常
1.当一个生成器函数被调用时,它会一直执行直到遇到一个 yield 关键字。yield关键字不会像 return 一样
终止当前函数的执行 而是会暂停当前函数的执行,直到我们外界再次调用 next 方法执行 该函数。
2.在第二次调用的 next 方法的时候 我们传入一个参数的话 这个参数会作为 yield 这个语句 的返回值
在返回的对象里面 {value: 'foo', done: false} 有一个 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,'回调');
})