您的位置:首页 > 其它

ECMAScript6 async

2016-05-11 16:08 148 查看
//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函数的语法糖
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: