回调函数
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) })