Vue Ax ios - не уверен, почему я не могу вызвать функцию в этом ответе - PullRequest
0 голосов
/ 22 января 2020

Я обновляю код предыдущего разработчика, и я застрял на том, почему я не могу этого сделать, так как код возвращает эту ошибку:

Uncaught (in promise) TypeError: failedCallback is not a function

Это функция I ' m работает с:

export default {
  get(callback, failedCallback) {
    axios.get(`/admin/shops`)
         .then(response => callback(response.data))
         .catch(errors => failedCallback(errors))
  }
}

, который затем импортируется следующим образом:

import getShop from '../api/shops'

и используется таким образом в моей глобальной защите маршрутизатора

router.beforeEach((to, from, next) => {
  if(to.name == null){
    getShop.get(
      data => {
        if(data.setup) {
          debugger;
          this.$store.dispatch('getBackground', false); #this is the line that causes the error!
          next({ name: 'customers_table'});
        }
        else {
          next({ name: 'plans'})
        }
      });
  }
  else {
    next();
  }
})

Когда я добавляю В приведенной ниже строке я получаю сообщение об ошибке TypeError

this.$store.dispatch('getBackground', false);

Не знаю, почему я получаю эту ошибку или как ее исправить?

РЕДАКТИРОВАТЬ: Это мое getBackground действие

getBackground: ({ commit }, payload) => {
  commit('changeBackground', payload);
}

Ответы [ 2 ]

1 голос
/ 22 января 2020

вы определили функцию get, которая принимает две функции в параметрах, но вы передали ей одну функцию, которая при ошибке показывает, что возвратный вызов не является функцией: enter image description here

и учтите, что вы не находитесь внутри компонента, поэтому этот. $ store не работает. если вы экспортируете магазин, как показано ниже: store. js

export const store = new Vuex.Store({
//everything is inside
})

, вы должны использовать:

import {store} from './store'

или если вы использовали экспорт по умолчанию, тогда вы должны использовать:

import store from './store'

затем используйте, как показано ниже:

store.getters.isAuthenticated

, как объяснено в этой топи c от linusburg: https://forum.vuejs.org/t/how-to-use-vuex-in-router/13520

1 голос
/ 22 января 2020

Ваш обратный вызов генерирует ошибку, которая перехватывается блоком catch. Блок catch пытается вызвать failedCallback, который вы не предоставляете getShop. Вот почему возникает ошибка типа для failedCallback.

Uncaught (in promise) TypeError: failedCallback is not a function

Первоначальная причина ошибки: this.$store. Хранилище недоступно в роутере по this.

Вам нужно импортировать хранилище в файле роутера, как это.

import store from '<whereever store is defined>'

store.dispatch('getBackground', false);

или импортировать Vue и получить доступ к хранилищу из protptype, как это.

import Vue from 'vue'

Vue.prototype.$store.dispatch('getBackground', false);
...