可选的类型修饰。 可选的属性描述。 model Tag { name String? @id } 在这个描述里,包含字段名 name、字段类型 String、类型修饰 ?、属性描述 @id。...类型修饰 类型修饰有 ? [] 两种语法,比如: model User { name String? posts Post[] } 分别表示可选与数组。...而 ORM 是建立在一个较为理想化理论基础上的,即数据模型可以很好的转化为对象操作,然而对象操作由于屏蔽了细节,我们无法对 SQL 进行针对性调优。...Prisma Schema 的好处 其实从语法上,Prisma Schema 与 Typeorm 基于 Class + 装饰器的拓展几乎可以等价转换,但 Prisma Schema 在实际使用中有一个很不错的优势...不过对于记录的创建,我更喜欢 Prisma 的 API: // typeorm - save API const userRepository = getManager().getRepository(
0; } 上述代码中n是不能被修改的,其实n本质是变量,只不过被const修饰后,在语法上加了限制,只要我们在代码中对n就⾏修改,就不符合语法规则,就报错,致使没法直接修改n。...Swap1函数在使⽤的时候,是把变量本⾝直接传递给了函数,这种调⽤函数的⽅式我们之前在函数的时候就知道了,这种叫传值调⽤。...结论:实参传递给形参的时候,形参会单独创建⼀份临时空间来接收实参,对形参的修改不影响实参。所以Swap是无法交换a和b的值了。 那怎么办?把值传过去竟然换不了?...b=%d\n", a, b); return 0; } 我们可以看到实现成Swap2的⽅式,这⾥调⽤Swap2函数的时候是将变量的地址传递给了函数,这种函数调⽤⽅式叫:传址调⽤ 结论: 传址调用...总结 通过本章我们学习了const修饰变量和指针变量,指针的**+ -**整数,指针-指针和指针关系运算,以及野指针的形成的原因,怎么去预防野指针。传值调用和传址调用的区别。
.mudule文件需要使用一个@Module() 装饰器的类,装饰器可以理解成一个封装好的函数,其实是一个语法糖(对装饰器不了解的,可以看走近MidwayJS:初识TS装饰器与IoC机制)。..., @Get是请求方法的装饰器,对getHello方法进行修饰, 表示这个方法会被GET请求调用。...TypeORM提供了多种连接方式,这里再介绍一下使用ormconfig.json方式 方法2 在根目录下创建一个ormconfig.json文件(与src同级), 而不是将配置对象传递给forRoot(...这一段是官方解释, 看不懂没关系,可以理解成,DTO 本身更像是一个指南, 在使用API时,方便我们了解请求期望的数据类型以及返回的数据对象。先使用一下,可能更方便理解。...对于第一个问题,我们都知道Typescript接口在编译过程中是被删除的,其次后面我们要给参数加说明,使用Swagger的装饰器,interface也是无法实现的,比如: import { ApiProperty
装饰器原型 接下来看一个回调函数的例子,所谓回调函数就是把函数当做参数传递给另一个函数,并在另一个函数中进行使用。这个特性在各种语言中都有使用。...__doc__) 返回结果如下: mul Calculate the product of two numbers wrapper None 可以看到,被装饰器修饰后,函数无法获取到正确的帮助信息。...但是如果在装饰器修饰后的函数无法准确获取到这两种参数。...= 'admin': raise Exception("This user is not allowed to get food") 如果我们用装饰器修饰函数,而且这样传参: func('admin...这就存在一个问题,从Python的语法中讲,用户使用位置参数或者关键字参数都是合法的,如何才能正确判断用户是否具有相应的权限呢? 这个问题是由于我们无法控制用户使用位置参数还是关键字参数。
0; } 上述代码中n是不能被修改的,其实n本质是变量,只不过被 const 修饰后,在语法上加了限制,只要我们在代码中对n就行修改,就不符合语法规则,就报错,至使没法直接修改n。...Swap1函数在使⽤的时候,是把变量本⾝直接传递给了函数,这种调⽤函数的⽅式我们之前在函数的时候就知道了,这种叫传值调⽤。...printf("交换后:a=%d b=%d\n", a, b); return 0; } 我们可以看到实现成Swap2的⽅式,顺利完成了任务,这⾥调⽤Swap2函数的时候是将变量的地址传递给了函数...传址调用,可以让函数和主调函数之间建立真正的联系,在函数内部可以修改主调函数中的变量;所以未来函数中只是需要主调函数中的变量值来实现计算,就可以采⽤传值调⽤。...如果函数内部要修改主调函数中的变量的值,就需要传址调⽤。
模版解析的作用在Vue中,我们可以使用类似HTML的语法编写组件的模版代码。这些模版代码包含了数据绑定、指令、事件等功能,但浏览器无法直接理解和执行这些代码。...* `parse`函数调用了`parseHTML`函数,将模版字符串作为参数传递给它,并传递了一个配置对象,其中包含了一些回调函数用于处理解析过程中的不同事件。...* 在解析过程中,使用正则表达式等方式对模版字符串进行扫描,并根据不同情况触发相应的回调函数。* 当遇到开始标签时,会调用回调函数`start(tag, attrs, unary)`。...而parseHTML函数则负责对模版字符串进行扫描,并根据不同情况触发相应的回调函数来处理开始标签、结束标签和文本内容等信息。...通过编译器对模版进行词法分析、语法分析和生成渲染函数代码等处理,实现了数据绑定、指令、条件和循环等功能。深入理解Vue模版解析的原理和源码实现,有助于我们更好地使用Vue框架进行前端开发。
但是命令行操作不够方便,所以我们还要下载一个有界面的 mysql 客户端,我这里用的是 navicat。 它可以可视化的创建数据库、表等,可以在编辑器里写 sql 然后执行。...Typeorm 就是一个实现 orm 的框架,可以通过装饰器来描述映射关系,比如 @Entity(实体)、@Column(列)、@PrimaryGeneratedColumn(主键 ID 自动生成) import...Controller 里面负责处理请求,把处理过的参数传递给 service。 Service 负责业务逻辑的实现,基于 Typeorm 的增删改查功能来实现各种上层业务逻辑。...此外,Nest.js 提供了 IOC 容器,统一管理对象的创建和依赖关系,根据声明来自动注入依赖。 两者的结合就是通过 @nestjs/typeorm 的包,它有两个静态方法用于生成 Module。...总之,理解了 IOC,理解了 Module、Controller、Service 的划分,就算是初步掌握了 Nest.js,结合 Typeorm 的 ORM 框架可以轻松的做数据库表的 CRUD。
同时完成多个任务的情况就可以称之为并行。回调函数(callback)面试题: 什么是回调函数?回调函数有什么缺点?如何解决回调地狱问题?...回调函数应该是大家经常使用到的,以下代码是回调函数的例子:ajax(url,()=>{ //处理逻辑})但是回调函数有个致命的弱点,就是容易写出回调地狱,假设多个请求存在依赖性,你可能就会写出如下代码...Generator面试题:你理解的generator是什么?Generator算是es6中难理解的概念之一了,Generator最大的特点就是可以控制函数的执行。...,其实它也是存在一些缺点的,比如无法取消 Promise,错误需要通过回调函数捕获。...)}demo()以上代码在浏览器环境中,如果定时器执行过程中出现了耗时操作,多个回调函数会在耗时操作结束以后同时执行,这样可能就会带来性能上的问题。
改进callback的回调函数的风格,迁移到 promise,async/await 更现代化 JavaScript 的异步处理方案。 使用更加灵活的事务的处理。...2、主流的 ORM 目前在数据持久层技术解决方案中 ORM 仍然主流的技术方案,ORM是"对象-关系映射"(Object/Relational Mapping)的缩写,简单来说ORM 就是通过实例对象的语法...,完成关系型数据库的操作的技术,如图-1。...对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。 ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。 容易产生N+1查询的问题。...在代码的实现上,我们使用 ES7 规范中装饰器的规范,来实现对目标类,方法,属性的修饰。装饰器的使用非常简单,其本质上就是一个函数包装。下面我们封装一个简单的 log 装饰器函数。
如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。 当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。...([p1,p2,p3]); 只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。...只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。...那个率先改变的 Promise 实例的返回值,就传递给p的回调函数. Promise.resolve() Promise.resolve()将现有对象转为Promise对象....代码不是纵向发展,而是横向发展,很快就会乱成一团,无法管理。因为多个异步操作形成了强耦合,只要有一个操作需要修改,它的上层回调函数和下层回调函数,可能都要跟着修改。
大家好,我是小江同学,本文将会带你理解和感受 Generator 函数的异步应用 引言 我们先引出一个非常常见的场景:对服务器端返回的数据进行操作 与服务器端交互的过程是一个异步操作 如果按照正常的代码编写的话...回调函数 事件监听 发布/订阅 Promise 对象 下面来先来回顾以下传统方法是如何实现异步编程的 Callback 回调函数可以理解为一件想要去做的事情,由调用者定义好函数,交给执行者在某个时机去执行...: 事件回调 定时器的回调 Ajax 请求 Promise 采用回调函数的方法,本身是没有问题的,但是问题出现在多个回调函数的嵌套 想一想,我执行完执行你,你执行完执行他,他执行完又执行她… 是不是需要层层嵌套...关于 Promise 的更多细节这里就不多说了,下一篇写吧~ 坏了,坏了,环环嵌套,我陷入回调地狱了,努力更文 Promise 成功的解决了回调地狱的问题,它又不是异步编程的终极方案,那它又带来了什么问题呢...async函数就是生成器函数的一个语法糖。 在语法上跟Generator函数非常类似,只要把生成器函数修改为async关键字修饰的函数,把yield修改为await就可以了。
大家好,我是小丞同学,本文将会带你理解和感受 Generator 函数的异步应用 引言 我们先引出一个非常常见的场景:对服务器端返回的数据进行操作 与服务器端交互的过程是一个异步操作 如果按照正常的代码编写的话...回调函数 事件监听 发布/订阅 Promise 对象 下面来先来回顾以下传统方法是如何实现异步编程的 Callback 回调函数可以理解为一件想要去做的事情,由调用者定义好函数,交给执行者在某个时机去执行...: 事件回调 定时器的回调 Ajax 请求 Promise 采用回调函数的方法,本身是没有问题的,但是问题出现在多个回调函数的嵌套 想一想,我执行完执行你,你执行完执行他,他执行完又执行她...关于 Promise 的更多细节这里就不多说了,下一篇写吧~ 坏了,坏了,环环嵌套,我陷入回调地狱了,努力更文 Promise 成功的解决了回调地狱的问题,它又不是异步编程的终极方案,那它又带来了什么问题呢...async 函数就是生成器函数的一个语法糖。 在语法上跟 Generator 函数非常类似,只要把生成器函数修改为 async 关键字修饰的函数,把 yield 修改为 await 就可以了。
数据表关系 前面文章中已经说了TypeORM建表时,是通过@Entity()装饰的class 映射为数据表, 所以实体中的关系也就是表关系。...我们在TypeORM中如何实现user表和info之间这种对一对的关系呢?...从上面代码可以看出, 是通过@OneToOne装饰器来修饰的, 在装饰器中需要指定对方entity的类型,以及指定对方entity的外键。...文章接口实现 这里简单了绘制一个实体关系图,方便理解一下我们要定义的实体有哪些: image.png 从图中可以看出,需要定义用户 User、 分类Category、标签Tag 以及文章Post 实体...QueryBilder 相关 find操作起来很简洁,但是无法应对所以场景: QueryBuilder是 TypeORM 最强大的功能之一 ,它让我们可以使用优雅便捷的语法构建 SQL 查询,执行并获得自动转换的实体
----------- kotlin中的协程干的事就是把异步回调代码拍扁了,捋直了,让异步回调代码同步化。除此之外,没有任何特别之处。 创建一个协程,就是编译器背后偷偷生成一系列代码,比如说状态机。...通过挂起和恢复让状态机状态流转实现把层层嵌套的回调代码变成像同步代码那样直观、简洁。 它不是什么线程框架,也不是什么高深的内核态,用户态。它其实对于咱们安卓来说,就是一个关于回调函数的语法糖。。。...我的理解是这样的 //This就是这个suspend lambda。...不理解这里的官方注释为啥叫做原子读。我觉得 Volatile只能保证可见性。...,帮我们把回调代码拍扁,成为同步代码。
回调函数(Callback)回调函数应该是大家经常使用到的,以下代码就是一个回调函数的例子:ajax(url, () => { // 处理逻辑})但是回调函数有一个致命的弱点,就是容易写出回调地狱...42Generator 函数一般见到的不多,其实也于他有点绕有关系,并且一般会配合 co 库去使用。...,其实它也是存在一些缺点的,比如无法取消 Promise,错误需要通过回调函数捕获。...如果你熟悉 co 的话,其实自己就可以实现这样的语法糖。...)}demo()以上代码在浏览器环境中,如果定时器执行过程中出现了耗时操作,多个回调函数会在耗时操作结束以后同时执行,这样可能就会带来性能上的问题。
领取专属 10元无门槛券
手把手带您无忧上云