как вызвать метод в компоненте Promise in Vue - PullRequest
0 голосов
/ 30 января 2019

В компоненте Vue:

import { someRequestMethod } from '@/api/requ'

...

methods: {
    testMethod() {
        someRequestMethod(someRequestData).then(function() {
            this.outMethod_01()
        }).then(function() {
            this.outMethod_02()
        })
    }

    outMethod_01() {
        console.log('I am an outer method 01.');
    }

    outMethod_02() {
        console.log('I am an outer method 02.');
    }
}

, когда я звоню testMethod, с ответом Promise.тогда я хочу позвонить outMethod_01, если получится, outMethod_02, если получит ошибку.но я получил ошибки outMethod_01 is undefined и outMethod_02 is undefined.

, так как вызвать внешний метод в Promise?

Ответы [ 3 ]

0 голосов
/ 30 января 2019

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

  someRequestMethod(someRequestData)
    .then(this.outMethod_01.bind(this))
    .then(this.outMethod_02.bind(this))
0 голосов
/ 30 января 2019
testMethod() {
    someRequestMethod(someRequestData).then(() => {
        this.outMethod_01()
    }).then(function() {
        this.outMethod_02()
    })
}

это работает.

0 голосов
/ 30 января 2019

Вы должны использовать синтаксис функции стрелки (params) => {...code} вместо function(params) {...code}.В стрелке функция this наследуется от области видимости.В обычной функции this - это сама функция (она имеет собственную область действия).

Подробнее вы можете узнать здесь: https://hackernoon.com/javascript-es6-arrow-functions-and-lexical-this-f2a3e2a5e8c4

Если вы не можете использовать синтаксис ES6, выможет сделать что-то вроде:

methods: {
    testMethod() {
        var self = this;
        someRequestMethod(someRequestData).then(function() {
            self.outMethod_01()
        }).then(function() {
            self.outMethod_02()
        })
    }

    outMethod_01() {
        console.log('I am an outer method 01.');
    }

    outMethod_02() {
        console.log('I am an outer method 02.');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...