базовый асинхронный вызов события @click в шаблоне vuejs

#javascript #vue.js

#javascript #vue.js

Вопрос:

Я хотел бы установить данные vue.js компонент с шаблоном кнопки и событием @click. Это событие вызывает компонент метода, который вызывает асинхронную функцию с обещанием.

Когда я нажимаю на свою кнопку, результат html-тега абзаца отображается правильно, но в то же время он выдает ошибку в моем браузере-инспекторе electron следующим образом :

vue.runtime.esm.js:620 [Предупреждение Vue]: ошибка в обработчике v-on: «Ошибка типа: foo.then(…).bind не является функцией»
найдено в
—> в src /views/TestDb.vue
в src /App.vue

Очень странно понимать, почему возникает ошибка, и в то же время выполнять свою работу….

Теперь я пытаюсь скопировать контекст this в другую переменную и вызвать эту переменную для изменения компонента данных, но, похоже, ESLint не советует анализировать файл в процессе. Для этого существует определенное правило.

Как может работать базовое обещание async для изменения данных с помощью шаблона кнопки нажатия на vuejs?

Это мой файл компонента :

 <template>

    <div id="testDb">
        <Menu />
        <h2>Test DB operation</h2>
        <b-button @click="createOperation">create Operation</b-button>
        <p style="background-color: white">{{ returnValue1 }}</p>
    </div>

</template>

<script>

import Menu              from "@/components/Menu";
import ConnectionManager from '../service/ConnectionManager'

export default
{
    name: "TestDb",
    components:
    {
        Menu
    },
    data: function()
    {
        return {
            alert: null,
            returnValue1: "beer"
        }
    },
    methods:
    {
        createOperation: function ()
        {
            const connectionManager = new ConnectionManager()
            let foo = connectionManager.insert('operation')
            foo.then(() => {
                this.returnValue1 = "bar"
            }).bind(this)
        },
    }
}

</script>

<style lang="scss" scoped>

    @import './src/assets/scss/main';

</style>
  

Ответ №1:

Поскольку вы используете функцию со стрелкой, нет необходимости добавлять bind(this) :

  foo.then(() => {
                this.returnValue1 = "bar"
            })
  

или

  foo.then(function(){
                this.returnValue1 = "bar"
            }.bind(this))
  

Комментарии:

1. Хорошо, я ищу много других вещей, но не о функции стрелки. Спасибо за очень быстрый ответ. Я подтверждаю, что это работает хорошо. Возможно, эта небольшая проблема поможет другим.

Ответ №2:

Удалите функцию bind «стрелка», которая уже выполнила привязку.

 foo.then(() => {
                this.returnValue1 = "bar"
            })
  

К ВАШЕМУ СВЕДЕНИЮ

Вы могли бы сделать это раньше

 foo.then(() => {
                this.returnValue1 = "bar"
            }.bind(this))