異步
我對異步的明白:
- 異步是不等結果,往下實行;同步是等結果湧現后,再往下實行
- 代碼中湧現異步順序時,如例2中,實行遞次就會發生變化
- 運用回調,就是讓實行遞次不會發生變化
但這一定不是異步要表達的意義,由於下面的例子是完全是異步的負面結果,那異步到底有啥作用?
下面的例子是處理異步帶來的題目,而非異步的長處。
例子:
1、下面的順序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()
2、如果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()
3、這不是我們想要的結果,我們想要的結果是f1()
、f2()
順次運轉,就需要運用回調函數,定義是將函數A作為參數,傳入函數B
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()
})
})
})
})
4、或許運用Promise
,更能表現實行的遞次
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 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