Как мне обработать ответ функции обратного вызова? - PullRequest
0 голосов
/ 06 июня 2018

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

Модуль A

export function processData(callback){
    var value = "TEST";
    callback(value);
}

Модуль B

import { processData } from './A.js';

var resultValue = ''; /*global variable */
function dataFetcher(){

    processData(getData);

    // define callback
    function getData(x){
        console.log(" I got x : "+x); /* prints TEST */
        sendData(x);
    }

    //called from callback function
    function sendData(data){
        resultValue = data;
    }
}

console.log(" print resultValue : "+resultValue); /* prints empty string */

Спасибо за ваше время и предложения.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Поскольку одна (или несколько) функций в вашем коде является асинхронной, функция обратного вызова запускается с задержкой, но ваш console.log вызывается в основном потоке немедленно.Чтобы решить эту проблему, вы можете изменить код следующим образом:

import { processData } from './A.js';

var resultValue = ''; /*global variable */
function dataFetcher(){

    processData(getData);

    // define callback
    function getData(x){
        console.log(" I got x : "+x); /* prints TEST */
        sendData(x);
    }

    //called from callback function
    function sendData(data){
        resultValue = data;
        done();
    }
}

function done() {
  console.log(" print resultValue : "+resultValue);
}
0 голосов
/ 06 июня 2018

Вы можете использовать async/await здесь.Как

async function() {
 resultValue = await yourAsyncCallBack();
  console.log(resultValue);

}();

Убедитесь, что ваш yourAsyncCallBack возвращает обещание.

...