不同js异步函数同步

不同函数达到同步的函数模拟

funcList是函数执行函数的队列,其中回调函数中flag=true是同步标记量

<script>
var flag = false;
function funcTest(t,func){
   setTimeout(function(){
     (function(param){
         console.log(param);
         func();
     }(t));
     },t*1000);
}
var funcList = [];
funcList.push(function(){funcTest(4,function(){
   flag = true;//同步标记量
})});//不同的异步函数添加进队列
funcList.push(function(){funcTest(3,function(){
   flag = true;
})});//不同的异步函数添加进队列
funcList.push(function(){funcTest(2,function(){
   flag = true;
})});//不同的异步函数添加进队列
dealFuncSync(funcList);
function dealFuncSync(funcList){
   function callBackSync(){
      if(!funcList||funcList.length==0){
          console.log('end');
          return;
      }
      flag = false;
      funcList.shift()();
      setTimeout(function(){
           if(flag) {//控制队列函数同步
              callBackSync();
           }else{
              setTimeout(arguments.callee,100);
           }
      },100);
   }
   callBackSync();
}
</script>


同步函数异步函数是编程中两种不同的执行模型,它们在处理任务时的方式、性能特点以及适用场景上存在显著差异。 同步函数按照顺序依次执行,每个操作必须等待前一个操作完成才能开始。这种模式简单直观,适合于那些不需要长时间等待的任务,比如简单的数学计算或者数据处理[^1]。例如,在Python中定义的一个普通函数`sync_function`就是同步执行的,它直接返回结果,并且调用时会阻塞当前线程直到执行完毕。 异步函数则允许程序在等待某个操作(如I/O操作或网络请求)完成的同时继续执行其他任务。这通过使用`async/await`关键字实现,使得代码可以非阻塞地运行[^1]。以Python中的`async_function`为例,该函数模拟了一个异步操作并通过`await asyncio.sleep(1)`来暂停执行而不阻塞整个线程。当处理大量I/O密集型任务时,这种方式能够显著提高应用程序的响应性和效率。 JavaScript同样支持异步编程模型,特别是在处理DOM事件、定时器或是AJAX请求等场景下更为常见[^2]。然而,JavaScript中的许多数组迭代方法通常采用同步回调的形式工作,这意味着这些方法会在当前任务结束之前立即执行完毕。 错误处理方面,同步函数可以通过传统的try/catch语句块来捕获异常;而对于异步函数来说,则需要特别注意如何正确地处理Promise链上的错误或者是利用async/await结构内的try/catch机制。 总结来说,选择同步还是异步取决于具体的应用需求: - 如果你的任务相对简单且不涉及长时间的外部资源等待,那么使用同步函数会更加直接方便。 - 对于涉及到文件读写、数据库查询、网络通信等耗时较长的操作,则推荐使用异步函数以避免阻塞主线程并提升整体性能。 ```python # 同步函数示例 def sync_function(): return "Hello, World!" result = sync_function() print(result) # 输出: Hello, World! # 异步函数示例 import asyncio async def async_function(): await asyncio.sleep(1) # 模拟异步操作 return "Hello, World!" async def main(): result = await async_function() print(result) # 输出: Hello, World! # 运行异步函数 asyncio.run(main()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值