这种想法是使用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') 然后将其余的任务交给第三方处理,自己等待结果就好了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)