回調函數
const p1 = new Promise ( function ( resolve, reject ) { resolve( '任務一' ) }) .then ( function ( data ) { console.log( data ) }) const p2 = new Promise ( function ( resolve, reject ) { setTimeout( function () { resolve( '任務二' ) },1000) }) .then ( function ( data ) { console.log( data ) }) console.log( '主線程任務 ') // Promise // .all([p1,p2]) // 先執行all中全部任務, 執行完成以後再去執行後面的任務 // .then( data => { // console.log( '任務3' ) // }) Promise .race([p1,p2]) // race 誰快輸出誰 .then( data => { console.log( '任務3' ) })
function* p1 () { yield '任務1'; yield '任務2'; yield '任務3'; yield '任務4'; yield '任務5'; yield function* p2() { yield '任務7' } return '任務6' } var p = p1() console.log(p.next()) console.log(p.next()) console.log(p.next()) console.log(p.next()) console.log(p.next()) console.log(p.next()) console.log(p.next())
//格式1,將async放在箭頭函數參數的前面 var asyncFn=async ()=>{ var req=await '任務1' console.log(req) console.log('任務3') } asyncFn() console.log('任務2') //輸出任務2--任務1--任務3 任務2在主線程上,最早運行,其餘的在任務隊列中,哪一個在前那個先輸出 var asyncFn=async ()=>{ var req=await '任務1' console.log('任務3') console.log(req) } asyncFn() console.log('任務2') //輸出任務2--任務3--任務1
//格式2 對象 async放在函數名前面 var obj={ async aa(){ var data=await '任務1' var res=data console.log(res) } } obj.aa()
process.nextTick(function(){ console.log('1') process.nextTick(()=>{ console.log('3') }) }) setImmediate(function(){ console.log('b') }) process.nextTick(function(){ console.log('2') }) console.log('主線程')
//引入async模塊 var async=require('async') //串行 async.series({//以耗時最多的任務爲主,結束才能走過去 one:function(callback){ callback(null,'任務1') }, two:function(callback){ setTimeout(()=>{ callback(null,'任務2') },1000) } },(err,data)=>{ console.log(data) })
//引入async模塊 var async=require('async') // async.parallel({//等待最長的耗時結束,先輸出耗時短的,在輸出耗時長的 one:(callback)=>{ setTimeout(()=>{ callback(null,'任務1') },2000) }, two:(callback)=>{ setTimeout(()=>{ callback(null,'任務2') },1000) } },(error,data)=>{ console.log(data) })