async await 和 generator yield 的使用方法和应用场景基本一样,不过 async await 的使用更加简练,不需要再写runner()来异步执行各个部分的代码,官方已经提供,所以注定选择更加简练方便的,使用async await,抛弃generator yield。
async function readData(){ // async ()=>{ // 注:async声明时可以写成箭头函数,但是generator不行。
let data1 = await $.ajax({url: 'arr.txt', dataType: 'json'});
let data2 = await $.ajax({url: 'json.txt', dataType: 'json'});
let data3 = await $.ajax({url: '1.txt', dataType: 'json'});
console.log(data1, data2, data3);
}
readData();
其上面写法完全等价于下面generator写法:(generator中的runner方法需要自己写或者引用别人写好的,但是async不用)
runner(function *readData(){
let data1 = yield $.ajax({url: 'arr.txt', dataType: 'json'});
let data2 = yield $.ajax({url: 'json.txt', dataType: 'json'});
let data3 = yield $.ajax({url: '1.txt', dataType: 'json'});
console.log(data1, data2, data3);
});
readData();
两者区别:
- async不依赖于外部的runner,性能高
- async可以使用箭头函数
关于async的详细运行机制,可以参考generator,因为两者完全一样,只不过async更加方便一些,可以参考es6中的generator yield)