Detect if inside callback?

0

I basically want a function to behave differently if it's inside a callback. See the example:

import Test from './test ;'

Test.say('Olá!'); // Deve imprimir: "Olá!"

Test.group(() => {
  Test.say('Ei!'); // Deve imprimir: "Ei! - Dentro do grupo."

  Test.say('Ei, como vai?'); // Deve imprimir: "Ei, como vai? - Dentro do grupo."
});

Test.say('Olá, como vai?'); // Deve imprimir: "Olá, como vai?"

Aquos test.js :

export default class Test {
  say(word) {
    // Se estiver dentro do grupo:
    if (estiverDentroDoGrupo) {
      return console.log('${word} - Dentro do grupo.');
    }

    console.log(word);
  }

  group(callback) {
    callback();
  }
}
    
asked by anonymous 12.04.2018 / 23:42

1 answer

0

First, it has to be said that magic does not exist. And the possibilities of a solution are as many as the imagination allows.

Where there is no concurrency and asynchronous, a solution you do not need to change main.js might be this:

let inGroup = false;

export default class Test{
  say(word) {
    // Se estiver dentro do grupo:
    if (inGroup) {
      return console.log('${word} - Dentro do grupo.');
    }

    console.log(word);
  },

  group(callback) {
    inGroup = true;
    callback();
    inGroup = false;
  }
}

Other options involve getting the name of the function that called say , emulating what arguments.calle.caller did in the old JS.

main js

const Test = require('./test');

Test.say('Olá!'); // Deve imprimir: "Olá!"

Test.group(function() {
  Test.groupSay('Ei!'); // Deve imprimir: "Ei! - Dentro do grupo."

  Test.groupSay('Ei, como vai?'); // Deve imprimir: "Ei, como vai? - Dentro do grupo."
});

Test.say('Olá, como vai?'); // Deve imprimir: "Olá, como vai?"

test.js

module.exports = {
  say,

  groupSay() {
    return say.apply({ inGroup: true }, arguments);
  },

  group(callback) {
    setTimeout(callback, 100);
  }
}

function say(word) {
  // Se estiver dentro do grupo:
  if (this.inGroup) {
    return console.log('${word} - Dentro do grupo.');
  }

  console.log(word);
}
    
13.04.2018 / 00:03