ECMAScript6 async

来源:互联网 发布:定性数据量化 编辑:程序博客网 时间:2024/05/17 22:18
//async(异步的) 函数
//es7里提供的
//async 使得异步操作变得更加方便,它是generator函数的语法糖
var fs = require('fs');


function readFile(name){
return new Promise(function(resolve,reject){
fs.readFile(name,function(err,body){
if(err){
reject(err)
}
resolve(body);
})
})
}
//g 函数写法
function* generator(){
var f1=yield readFile('package.json');
console.log(f1.toString())
var f2=yield readFile('a.js');
console.log(f2.toString())
}


//async写法
//1 把*换成了async 
//2 yield 换成了await
async function ac1(){
var f1=await readFile('package.json');
console.log(f1.toString())
var f2=await readFile('a.js');
console.log(f2.toString())
return f2;
}
//async的改进 


//1 内置执行器,generator的执行需要有执行器,所以才有了co
//而async自带了执行器。它的执行和普通函数一样
var result=ac1();
//调用了ac1后它就会立即执行,输出最后结果


//2更好的适用性,await(等侯)后可以是Promise 和原始 类型的值
//数值,字符串,等。但这时等同于同步执行了。


//3 async 函数返回的是Promise对象,
//async函数完全可以看作多个异步操作,包装成的一个Promise对象,
//而await 命令就是内部then命令的语法糖
//正常情况下,await命令后面是一个Promise对象,否则会被转成Promise。




//async函数的实现就是将generator 函数和自动执行器,包装在一个函数里。
//then参数还可以获取return 的值
result.then(function(res){


console.log('----------------------------------ok')
console.log(res.toString());
})
//async返回promise所以可以用then
//当执行时,一旦遇到await 就会先返回,等到异步完成
//再接着执行后面语句。


//await 后的promise可能返回reject 所以最好把await 包在try内


//编译需要用 traceur --experimental async2.js 

//async 使得异步操作变得更加方便,它是generator函数的语法糖


0 0
原创粉丝点击