无法调用 `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
传入 call
与 confirmCode
不兼容。
您可以通过函数定义中的两种方式解决此问题,这意味着您可能需要向代码添加默认值
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);
}
我有一段代码正在使用来自 redux saga 的 yield 调用 api,它正在调用一个函数并提供一个输入。
它正在调用一个简单的 POST 函数,该函数 returns 在点击 api 时做出响应。
此函数的输入是一个名为 code
的字符串,它是根据 url 中的参数设置的。我们正在使用 URLSearchParams 根据关键字从 URL 中获取特定参数。
问题的根源似乎在于此 URLSearchParams 使用 window 对象来获取代码。这导致 yield 调用出现问题并给我以下流程错误:
Cannot call
call
because: Either propertycontext
is missing in function 1 but exists in object type [2]. Or propertycontext
is missing in function 1 but exists in object type [3]. Or propertycontext
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
传入 call
与 confirmCode
不兼容。
您可以通过函数定义中的两种方式解决此问题,这意味着您可能需要向代码添加默认值
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);
}