typescript保证同步的理解

首先,我先说一下:恕我直言,脚本真JB操蛋,虽然TS引入了类型,因为兼容JS,也是操蛋。再加上nodejs的事件循环。官方文档不人性,小众语言,尼玛,不给初学者活路。

OK,发泄完了,现在来说下TS对于异步事件的同步控制吧。

 

关键字:promise,async,await,事件循环,异步IO具体怎么实现的自己去看。

如果你要控制一小段的同步:比如查询A表之后,根据A的数据再去删除B数据

那么基本的套路

(async function() 

{

    await queryA();

   console.log("xxxx");

   await deleteBAccordingA();

})();

(备注1:JS用的是回调的方式:就是查询A的回调里再去删除B,如果这个流程长的话,那就是回调地狱了,维护起来跟吃屎一样)

(备注2:要控制同步的步骤必须写在async函数中,里面要用await去控制,await后面跟的函数必须返回一个promise)

 

说完基本的套路。

现在我们来理解下具体如何写好这个功能:

1。返回promise的函数如何写:

function queryA()

{

//异步操作1

//异步操作2

}

如上,如果在上述函数中,有两个异步函数,如果你要保证queryA的2个异步都要操作完,才能去deleteBAccordingA的话,那么要让两个异步操作完,再返回Promise的resove或者reject。切记await是通过Promise的2个resolve和reject来实现同步,pengding是Promise的初始状态不参与这个。如果异步1你参与返回Promise状态,异步2参与了,那么就只有异步2参与了同步。异步1与该同步链无关,自己做自己的事。

     OK,现在返回async函数中。

(async function() 

{

  console。log("oooo");

   //没await控制的异步操作 step1

    await queryA();

   console.log("xxxx");

//没await控制的异步操作 step2

   await deleteBAccordingA();

})();

现在讲下,该程序如何跑的:

首先同步打出ooo没什么问题。

然后是step1的异步操作。一看到这个,就直接把他扔个系统的另外几个线程去做异步IO,他不参与我们的同步链,不管他们了。

之后是await控制的queryA,那么aynsc函数中queryA后面的代码段全部跳过,执行其他的函数,这边不显示了。

那么到了下个事件循环或者下下个事件循环,queryA中的异步操作返回了我们要的resolve状态,如果是reject的状态的话,那么一般都是出错,此处不考虑。得到resolve之后,接着走下面的代码段,这里可以理解为本次事件循环的同步运行。所以xxx直接被打印出来。如果又碰到不受同步链控制的异步操作step2,直接扔个其他的线程,反正他和我们的同步链不相互影响。

最后看到await,也是到deleteBAccordingA去获取Promise的resolve,得到之后才能去走下面。当然此处异步函数已经走到尽头了。

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TypeScript是由微软开发的一款开源的编程语言,它是JavaScript的超集,遵循最新的ES6、ES5规范,并扩展了JavaScript的语法。它更像后端的Java、C#等面向对象语言,可以用于开发大型企业项目。谷歌也在大力支持TypeScript的推广,谷歌的Angular2.x+就是基于TypeScript语法开发的,最新的Vue和React也可以集成TypeScript。在Node.js框架中,Nest.js和midway也使用了TypeScript语法。\[1\] TypeScript中的never类型是任何类型的子类型,也可以赋值给任何类型,但没有类型是never的子类型或可以赋值给never类型,即使是any类型也不可以赋值给never。这意味着声明为never类型的变量只能被never类型所赋值。例如,可以使用throw new Error()来抛出一个错误,该函数的返回类型就是never。\[2\] 在TypeScript中,可以声明浮点型变量并赋予其一个浮点数值,例如let num: number = 3.1415926。同时,也可以声明字符串类型变量并赋予其一个字符串值,例如let str: string = "Hello, TypeScript"。\[3\] 总结来说,TypeScript是一种扩展了JavaScript语法的编程语言,适用于开发大型企业项目,并且具有丰富的类型系统和面向对象的特性。它的语法规范遵循最新的ES6、ES5规范,可以与各种前端框架和后端框架集成使用。 #### 引用[.reference_title] - *1* *2* *3* [学习TypeScript4这一篇就够了](https://blog.csdn.net/qq_38490457/article/details/109965694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值