gpt4 book ai didi

javascript - redux-saga 调用调用的函数中对 "this"的引用为空

转载 作者:行者123 更新时间:2023-11-30 19:11:45 25 4
gpt4 key购买 nike

我正在学习 redux-saga,我正在尝试将它集成到一个项目中,该项目使用由 openapi-generator 生成的 API,它会产生如下输出:

async loginUser(body: Login): Promise<LoginResponse> {
debugger;
const response = await this.loginUserRaw({ body: body });
return await response.value();
}

loginUserRaw 是执行实际登录的函数。然后,我有以下传奇:

function* login(action:Login) {
try{
const response = yield call(User.loginUser, action);
yield result(LOGIN_SUCCESS, response)
}catch(e){
yield result(LOGIN_FAILURE, e)
}
}

运行时,我的 API 方法 await this.loginUserRaw({ body: body }); 行出现错误:

TypeError:无法读取 null 的属性“loginUserRaw”

我调试它并看到 this 为空。当我在 saga 中显式绑定(bind)函数时:

const response = yield call(User.loginUser.bind(User), action);

它可以工作,但我不想每次调用函数时都绑定(bind)它。如何在不显式绑定(bind)函数的情况下让 saga 工作? (我无法更改生成的代码,也无法删除 this)

最佳答案

Javascript 中的上下文是动态的,基于您编写代码的方式

const loginUser = User.loginUser
loginUser() // context lost, because there is no longer `User.` in front of it

将函数作为参数传递时同样适用。这意味着您必须以某种方式提供 call 效果上下文。 bind 方法是一种选择,但效果本身支持多种提供上下文的方式。您可以在官方文档中找到它们 https://redux-saga.js.org/docs/api/#callcontext-fn-args ,这是它的简短版本:

传递上下文的可能方式:

call([context, fn], ...args)
call([context, fnName], ...args)
call({context, fn}, ...args)

例如,您可以执行以下操作:

const response = yield call([User, User.loginUser], action);

关于javascript - redux-saga 调用调用的函数中对 "this"的引用为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58397875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com