Вызов функции метода внутри функции асинхронного метода - PullRequest
0 голосов
/ 17 октября 2019

У меня есть два метода: method_1 и aysnc method_2;Я хотел бы вызвать method_1 внутри aysnc method_2 (после получения некоторых данных);

(aysnc method_2 перехватывает данные и передает их в method_1 и выполняет их.)

Я использую this.method_1 внутри aysnc method_2 для его вызова, но ничего не происходит.

method_1 (data) {
    console.log( 'I need it here', data );
} ,

triggerByUser () {

    this.method_1( 'just a test' );

    async function method_2 () {

        let code = await fileRetriever( 'songs' );
        console.log( 'this code retrieved: ' ,  code );
        this.method_1( code );
        console.log( 'the code has been sent!' );

    } ;

    method_2 (  ) ;
},

результат:

JS: 'I need it here' 'just a test'
JS: 'response From fileRetriever:' 58
JS: 'this code retrieved: ' 58

(проект написан на NativeScript + Vue)

Ответы [ 3 ]

0 голосов
/ 17 октября 2019

Я не знаю Nativescript, но, как я могу прочитать из вступления, кажется, что Vue Component - это то же самое, что и classic Vue.

Вы вложили method_2 в triggerByUser если вы переместите его наружу, в methods и вызовете его с помощью await, все функции будут корректно

methods:{
    method_1 (data) {
      console.log( 'I need it here', data );
    },
    async triggerByUser () {
        this.method_1( 'just a test' );
        await this.method_2();
    },
    async method_2 () {

        let code = await fileRetriever( 'songs' );
        console.log( 'this code retrieved: ' ,  code );
        this.method_1( code );
        console.log( 'the code has been sent!' );

    }    
}
0 голосов
/ 20 октября 2019

Ну очень просто ..

создайте два метода и вызовите их в третьем асинхронном методе

Например, вам нужно выполнить два вызова ajax, когда пользователь нажимает на тег привязки, а затем выбудет делать это так.

<template>
    <div>
         <a @click="getDataFromTwoOtherMethods()">Click here</a>
    </div>
</template>
<script>
    export default{
    ...
    methods:{
       method1(){},
       method2(){},


       async getDataFromTwoOtherMethods(){
            await this.method1();
            this.method2();
            //this method will wait for method1 to execute 
            //and get response and then call second method
       } 
   },
</script>
0 голосов
/ 17 октября 2019

кажется, что мне нужно передать его как обратный вызов;

triggerByUser () {

    this.method_1( 'just a test' );

    async function method_2 ( callback ) {

        let code = await fileRetriever( 'songs' );
        console.log( 'this code retrieved: ' ,  code );
        callback( code );
        console.log( 'the code has been sent!' );

    } ;

    method_2 ( this.method_1 ) ;
},

результат:

JS: 'I need it here' 'just a test'
JS: 'response From fileRetriever:' 58
JS: 'this code retrieved: ' 58
JS: 'I need it here' 58
JS: 'the code has been sent!'

Есть ли лучший подход ?! (поскольку использование async + callback мне кажется немного грязным)

...