我对异步的理解:异步
但这确定不是异步要表达的意思,由于下面的例子是彻底是异步的负面效果,那异步到底有啥做用?async
下面的例子是解决异步带来的问题,而非异步的优势。函数
例子:code
一、下面的程序f1()
,f2()
,...,f5()
,它会按照顺序从上往下的顺序执行,就是同步。回调函数
f1 =function(){console.log(1)} f2 =function(){console.log(2)} f3 =function(){console.log(3)} f4 =function(){console.log(4)} f5 =function(){console.log(5)} f1() f2() f3() f4() f5()
二、假如f1()
是个异步函数,它的执行顺序就会发生变化f2()
,...,f5()
,f1()
同步
f1 =function(){ setTimeout(function(){ console.log(1) },10) } f2 =function(){console.log(2)} f3 =function(){console.log(3)} f4 =function(){console.log(4)} f5 =function(){console.log(5)} f1() f2() f3() f4() f5()
三、这不是咱们想要的结果,咱们想要的结果是f1()
、f2()
依次运行,就须要使用回调函数,定义是将函数A做为参数,传入函数Bio
f1 =function(fn){ setTimeout(function(){ console.log(1) fn.call() },10) } f2 =function(fn){console.log(2);fn.call()} f3 =function(fn){console.log(3);fn.call()} f4 =function(fn){console.log(4);fn.call()} f5 =function(fn){console.log(5);fn.call()} f1(()=>{ f2(()=>{ f3(()=>{ f4(()=>{ f5() }) }) }) })
四、或者使用Promise
,更能体现执行的顺序console
f1 =function(){ return new Promise(function(resolve){ setTimeout(function(){ console.log(1) resolve.call() },10) }) } f2 =function(){console.log(2)} f3 =function(){console.log(3)} f4 =function(){console.log(4)} f5 =function(){console.log(5)} f1().then(f2).then(f3).then(f4).then(f5)
把函数 A 做为参数传入函数 B 中function
function async(f1, f2) { setTimeout(function() { f1.call(); f2.call(); }, 0); } function foo(){ console.log('foo'); } function bar(){ console.log('bar'); } console.log('异步开始'); async(foo, bar) console.log('异步结束'); //打印结果: //异步开始 //异步结束 //foo //bar