Выпуск обещает VueJS - PullRequest
0 голосов
/ 25 февраля 2020

Я сегодня здесь. Я делаю топор ios вызов моего API. При успешном ответе я запускаю функцию и создаю на своей странице график из полученных данных.

Он работает нормально, пока я оставляю все дополнительные преобразования внутри метода

        mounted() {
            this.month = moment().month("June").format("YYYY-MM");
            axios.get('/data/statistic2/'+this.month)
                .then(response => {
                    this.set = response.data;
                    this.generateChart(response.data);
                })
        },

        methods: {

            generateChart(input) {
                let data = [];
                input.forEach(function(row) {
                    let item = {};
                    item.day = row.day;
                    let timeArray = [row.time1, row.time2,row.time3,row.time4,row.time5];
                    let result = timeArray.filter(function(item) {
                            return item !== null;
                        }).reduce((prev, current) => parseInt(prev) + parseInt(current)); 
                    item.time = result;
                    data.push(item);    
                })
                this.datachart = data;
            },

Но когда я пытаюсь инкапсулировать этот бит логики c в отдельный метод

        mounted() {
            this.month = moment().month("June").format("YYYY-MM");
            axios.get('/data/statistic2/'+this.month)
                .then(response => {
                    this.set = response.data;
                    this.generateChart(response.data);
                })
        },

        methods: {

            generateChart(input) {
                let data = [];
                input.forEach(function(row) {
                    let item = {};
                    item.day = row.day;                 
                    item.time = convertTimeFromDB(row);
                    data.push(item);    
                })
                this.datachart = data;
            },

            convertTimeFromDB(row) {
                let timeArray =  [row.time1, row.time2,row.time3,row.time4,row.time5];
                return timeArray.filter(function(item) {
                        return item !== null;
                    }).reduce((prev, current) => parseInt(prev) + parseInt(current));

            },

Я получил «Uncaught (в обещании) ReferenceError: convertTimeFromDB не определено»

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Вы должны изменить convertTimeFromDB(row) на this.convertTimeFromDB(row) и изменить function(row) {} на функцию стрелки (row => {}):

generateChart(input) {
  let data = [];
  input.forEach((row) => {
    let item = {};
    item.day = row.day;                 
    item.time = this.convertTimeFromDB(row);
    data.push(item);    
  })
  this.datachart = data;
},
1 голос
/ 25 февраля 2020

Это не имеет ничего общего с обещаниями.

convertTimeFromDB является свойством объекта methods. Это не переменная (в области видимости или иным образом).

Вы должны ссылаться на нее в контексте объекта (например, whatever.methods.convertTimeFromDB)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...