JS中通常实现浏览器和服务器的数据交互,那么异步操作是关键的一部分:通常情况下,浏览器想服务器发送请求,服务器相应请求返回数据,浏览器执行异步操作。
使用定时函数模拟异步请求数据:// 使用定时函数模拟异步请求:
// 方法一:使用回调函数
function doSomething(callback){
setTimeout(function(){
console.log('执行结束');
let result = 4;
callback(result);
},100);
}
function callback(result){
console.log('接收到结果为:'+result);
}
doSomething(callback);
doSomething((result)=>{console.log('接收到结果为:'+result)});
// 方法二:promise对象
function doSomething(){
return new Promise(function(resolve){
setTimeout(function(){
console.log('执行结束');
let result = 6;
resolve(result);
},100);
});
}
doSomething().then(result=>{
console.log('接收到结果为:'+result);
});
// 方法三:generator函数
function doSomething(){
setTimeout(function(){
let result = 6;
it.next(result);
},100);
}
function *gener(){
var result = yield doSomething();
console.log(result);
}
let it = gener();
it.next();
// 方法四:async(ES7)
function doSomething(){
return new Promise(resolve=>{
setTimeout(function(){
let result = 6;
resolve(result);
},100);
});
}
async function action(){
let result = await doSomething();
console.log(result);
}
action();
Promise的含义:
promise是异步编程的一种解决方法。
所谓promise,简单说是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,从语法上说,promise是一个对象,从它可以获取异步操作的消息,promise提供了统一的API,各种异步操作都可以用同样的方法进行处理。
Generator函数:
Generator函数是es6提供的一种异步编程的解决方案,语法行为与传统函数完全不一样。
Generator函数有多种理解角度,从语法上,首先可以把它理解成,Generator函数是一个状态机,封装了多个内部状态。
执行Generator函数会返回一个遍历器对象,也就是说,Generator函数除了是状态机还是一个遍历器对象生成函数。 返回遍历器对象,可以依次遍历Generator函数内部的每一个状态。
async:
async是HTML5的新属性,该属性规定一旦脚本可用,则会异步执行(一旦下载完毕就会立刻执行)。