【问题标题】:Promisify in redis client violates eslint rulesRedis 客户端中的 Promisify 违反了 eslint 规则
【发布时间】:2021-06-02 22:41:18
【问题描述】:

我想通过promisify使用redis客户端:

import type { RedisClient } from "redis";
import * as util from "util";

class MyClass {
  private redisClient: RedisClient;

  constructor(client: RedisClient) {
    this.redisClient = client;
  }

  getMyData = (): SomeType[] => {
    const getAsync: Promise<string | undefined> = util.promisify(this.redisClient.get).bind(this.redisClient);
 // ...
  };
}

但是我在使用 eslint 时遇到了两个问题:

  1. ESLint: Avoid referencing unbound methods which may cause unintentional scoping of 'this'.(@typescript-eslint/unbound-method)this.redisClient.get 片段

和

  1. ESLint: Unsafe assignment of an any value.(@typescript-eslint/no-unsafe-assignment)getAsync

我如何以一种可以识别类型并正确确定this 范围的方式使用promisify?

【问题讨论】:

  • 你试过util.promisify(this.redisClient.get.bind(this.redisClient))
  • 解决了第一个问题,谢谢!你知道我如何解决第二个问题吗?
  • 试试这个:const getAsync = util.promisify&lt;string|undefined&gt;(this.redisClient.get.bind(this.redisClient))
  • 有效!您可以将您的 cmets 转换为 answer 以便我接受吗?

标签: typescript eslint node-redis typescript-eslint node-promisify


【解决方案1】:

在您的第一个 eslint 错误中,您将 this 绑定到错误的方法。

在第二个错误中,您告诉 Typescript getAsync 应该保留什么返回类型,而不是您需要告诉 promisify 您试图承诺的返回值是什么。

这应该可以修复两个 eslint 错误:

import type { RedisClient } from "redis";
import * as util from "util";

class MyClass {
  private redisClient: RedisClient;

  constructor(client: RedisClient) {
    this.redisClient = client;
  }

  getMyData = (): SomeType[] => {
    const getAsync = util.promisify<string |undefined>(this.redisClient.get.bind(this.redisClient))

  };
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2019-07-09
    • 2020-04-11
    • 1970-01-01
    • 2019-01-09
    相关资源
    最近更新 更多