无法调用 `call` 因为:使用 Redux-Saga 时函数流错误中缺少 属性 `context`?

Cannot call `call` because: Either property `context` is missing in function flow error when using Redux-Saga?

我有一段代码正在使用来自 redux saga 的 yield 调用 api,它正在调用一个函数并提供一个输入。

它正在调用一个简单的 POST 函数,该函数 returns 在点击 api 时做出响应。

此函数的输入是一个名为 code 的字符串,它是根据 url 中的参数设置的。我们正在使用 URLSearchParams 根据关键字从 URL 中获取特定参数。

问题的根源似乎在于此 URLSearchParams 使用 window 对象来获取代码。这导致 yield 调用出现问题并给我以下流程错误:

Cannot call call because: Either property context is missing in function 1 but exists in object type [2]. Or property context is missing in function 1 but exists in object type [3]. Or property context is missing in function

代码如下:

const params = new URLSearchParams(window.location.search);
const code = params.get('code');
const res = yield call(confirmCode, code); // This call is where the error is happening

这是它正在调用的 confirmCode 函数:

export function confirmCode(code: string): Promise<TResp<void>> {
  return request(`/agent/v1/confirm-code/${code}`, {
    method: 'POST',
    mode: 'cors',
  });
}

params.get('code'); returns null | string 所以实际上你的问题是 code 传入 callconfirmCode 不兼容。

您可以通过函数定义中的两种方式解决此问题,这意味着您可能需要向代码添加默认值

export function confirmCode(code: ?string): Promise<TResp<void>> {
  return request(`/agent/v1/confirm-code/${code}`, {
    method: 'POST',
    mode: 'cors',
  });
}

或者在运行call

之前检查code是否有效
const params = new URLSearchParams(window.location.search);
const code = params.get('code');
if (code) {
  const res = yield call(confirmCode, code);
}