Javascript this.setToken不是函数

Javascript this.setToken不是函数,javascript,Javascript,我试图在我的操作中调用函数,但得到错误this.setToken不是函数: async function setToken() { const { credentials: { year, group, student } } = this.props; const fcmToken = await firebase.messaging().getToken(); if (fcmToken) { firebase

我试图在我的操作中调用函数,但得到错误
this.setToken不是函数

async function setToken() {
    const {
        credentials: { year, group, student }
    } = this.props;
    const fcmToken = await firebase.messaging().getToken();

    if (fcmToken) {
        firebase
            .firestore()
            .collection("users")
            .doc(fcmToken)
            .set({
                year
            })
            .then(function() {
                return true;
            })
            .catch(function(error) {
                return false;
            });
    }
}

export function fetchEvents(id) {
    const currentDateString =
        moment().format("YYYY-MM-DD") + "T" + "07:00:00.000Z";

    const url = xxx;

    return async dispatch => {
        dispatch(isLoading(true));
        const setToken = await setToken(); // call here

        fetch(url)
            .then(response => {
                return response;
            })
            .then(response => response.json())
            .then(data => {
                const { error } = data;
                if (error) {
                    dispatch(hasErrored(error.message));
                } else {
                    dispatch(fetchSuccessEvents(data.items));
                }

                navigate("Month");
                dispatch(isLoading(false));
            });
    };
}

有什么想法吗?

setToken
被定义为一个独立的函数,而不是实例或当前
this
的属性,或类似的属性:

async function setToken() {
所以,像调用任何其他函数一样调用它,而不要将
this
放在它前面

您也不能在内部作用域中使用相同的变量名,否则将引用内部变量(它将以
undefined
/uninitialized开头);将结果指定给不同的变量名:

const token = await setToken();
但是您当前的代码没有
setToken
解析任何内容,在这种情况下,您可以简单地
等待它,而不将结果分配给任何内容:

await setToken();

setToken
被定义为一个独立的函数,而不是实例或当前
this
或类似内容的属性:

async function setToken() {
所以,像调用任何其他函数一样调用它,而不要将
this
放在它前面

您也不能在内部作用域中使用相同的变量名,否则将引用内部变量(它将以
undefined
/uninitialized开头);将结果指定给不同的变量名:

const token = await setToken();
但是您当前的代码没有
setToken
解析任何内容,在这种情况下,您可以简单地
等待它,而不将结果分配给任何内容:

await setToken();
使用

而不是

this.setToken()
据我所知,您不在类环境中,因此
setToken()
不是一个实例或属性,而是一个独立的函数。
如果您喜欢使用类表示法,可以使用
window.setToken()

使用

而不是

this.setToken()
据我所知,您不在类环境中,因此
setToken()
不是一个实例或属性,而是一个独立的函数。

如果您喜欢使用类表示法,可以使用
window.setToken()

这并不是您想象的那样。使用
bind
或在您拥有它时保留它的引用。请记录该对象,JS引擎不会对你撒谎。是的,请阅读javascript
这个
的上下文。使用
bind
或在您拥有它时保留它的引用。请记录这个对象,JS引擎不会欺骗你。是的,阅读javascriptAh中
这个
的上下文,你也在使用相同的变量名,需要修复它,所以你使用不同的变量名啊,你也在使用相同的变量名,需要修复它,所以你使用不同的变量名