这种想法是使用celery时得来的本身想拿python代码来举例,但还是使用js吧核心思想是所有的异步任务交给(伪)第三方处理,而交给第三方后自己的主线程处于空闲阶段,所以又可以做别的事情了
const async_fun = async ()=>{ return '异步任务的结果999'} //定义一个简单的异步任务
const async_start = async ()=>{
console.log('我要使用异步了')
const data = await async_fun() //主线程把异步任务交给第三方了,第三方做完后会给我的变量data(异步任务需要await修饰取返回值)
console.log(data) //打印第三方交给主线程的结果(结果必须是第三方完成任务之后才有的)
console.log('所有的任务终于完成了')
}
async_start()//使用了异步任务
console.log('我不是异步,但是我在得到结果前打印了出来')//我是在主线程把任务交给第三方做了之后,主线程没事情做所以来执行我了
代码的结果:
我要使用异步了
我不是异步,但是我在得到结果前打印了出来
异步任务的结果999
所有的任务终于完成了
其中这两句代码
async_start() console.log
可以理解为
console.log('我要使用异步了')
const data = await async_fun()
console.log(data)
console.log('所有的任务终于完成了')任务一
--------------------------------------------
console.log('我不是异步,但是我在得到结果前打印了出来') 任务二
每一个独立的任务都必须是从上到下按顺序运行的,但是将任务交给第三方后,可以去执行别的任务
所以我将代码修改一下
const async_fun = async ()=>{
//-------------我在这里加了一个第三方不能做的事情,需要我自己做
console.log('需要我自己做的任务1234')
//终于做完了,我可以去等待第三方把结果给我了
return '异步任务的结果999'}
const async_start = async ()=>{
console.log('我要使用异步了')
const data = await async_fun()
console.log(data)
console.log('所有的任务终于完成了')
}
//然后
async_start()
console.log('我不是异步,但是我在得到结果前打印了出来')
输出结果:
我要使用异步了
需要我自己做的任务1234
我不是异步,但是我在得到结果前打印了出来
异步任务的结果999
所有的任务终于完成了
最后两句代码还有有必要翻译下
console.log('我要使用异步了')
const data = await async_fun()
console.log(data)
console.log('所有的任务终于完成了')任务一
--------------------------------------------
console.log('我不是异步,但是我在得到结果前打印了出来') 任务二
但不同的是我的异步任务不能直接交给第三方,里面需要
但是呢async_fun() 有了变化
需要先
console.log('需要我自己做的任务1234')
然后将其余的任务交给第三方处理,自己等待结果就好了



