小编ben*_*sky的帖子

postgres 不支持 TypeORM 数组?

我有一列kid_agesInteger[]. 迁移时,我收到以下错误:

DataTypeNotSupportedError: Data type "Array" in "home.kid_ages" is not supported by "postgres" database.

我尝试将以下选项添加到我的专栏中:

type: 'array'
Run Code Online (Sandbox Code Playgroud)

和:

array: true,
default: [],
nullable: false,`

@Column({
  array: true,
  default: [],
  nullable: false,
})
kid_ages: string;`
Run Code Online (Sandbox Code Playgroud)

javascript postgresql node.js typescript typeorm

22
推荐指数
6
解决办法
3万
查看次数

处理 Angular 中 API 请求的订阅内存泄漏

当我开始使用 Angular 时,我工作场所的某人告诉我在使用RxJs中的可观察量take(1)执行 API 调用时使用,声称它会在一次 API 调用后自动取消订阅。

所以我相信这个说法,并继续使用它,直到我发现组件加载时有大量渲染延迟,尤其是在页面之间导航时。

让我们看一下我的例子:

这是UserRepository与 API 对话以向应用程序授予权限的:

@Injectable({
    providedIn: 'root'
})
export class UserRepository {

    private apiUrl: string = environment.apiUrl;

    constructor(private readonly httpRequestService: HttpRequestService) {
        super();
    }

    @UnsubscribeOnDestroy()
    getPermissions() {
        return this.httpRequestService.get(`${this.apiUrl}/user/permissions`).pipe(map((res: any) => res.user));
    }
}
Run Code Online (Sandbox Code Playgroud)

以及用法:

userRepository.getPermissions().pipe(take(1)).subscribe(data => ...);
Run Code Online (Sandbox Code Playgroud)

我在谷歌上搜索了一下,发现它take(1)不会自动取消订阅,而且根本不是目的,它所做的只是从管道中获取一个可观察值并忽略其余部分。

为了解决这个问题,我采取了以下措施:

  1. 选项#1:与,调用takeUntil一起使用来触发取消订阅unsubscriptionSubjectunsubscriptionSubject.nextngOnDestroy
  2. 选项#2:BaseRepository使用 的字典创建一个methodName => Subject,因此对于每个 API 调用,我可以保存它自己的主题,并创建一个装饰器,该装饰器会自动取消订阅先前的 API 调用,并确保不会有超过一个类型的订阅API 调用的。

选项 #2 提到的装饰器和用法示例:

基础存储库 …

memory-leaks rxjs typescript angular

3
推荐指数
1
解决办法
265
查看次数