2

I am new to javascript. I have a js file something like below(test.js):

async function getData() {
   let a =100;
   // Some other function calls which modifies a
   // Some more console logs here.
   return a;
}
(async () => {
  console.log(await getData()); // When trying to return await getData() giving some error.
})();

I am executing the above script output = $(node test.js) in shell script and I need the value of a in the shell script but here I am getting all the console.log statements. Is it possible to get the value?

Toto
  • 89,455
  • 62
  • 89
  • 125
  • check [this](https://stackoverflow.com/a/43169153/7865759) answer maybe help you – Amin Taghikhani Aug 22 '21 at 08:37
  • I tried that, but it also printing all console log statements along with the returned value. – lakshmiravali rimmalapudi Aug 22 '21 at 08:44
  • is it because of the spaces? shell is very picky about spaces, pls make sure it's `output=$(node test.js)` and there is no space around the `=` sign – tsamridh86 Aug 22 '21 at 08:58
  • Have a look at [process.stdout](https://nodejs.org/api/process.html#process_process_stdout). With stdout you print out stuff so that it can be used by other application. Maybe this can also help: [bash - How to handle stdout in node.js - Stack Overflow](https://stackoverflow.com/questions/23143704/how-to-handle-stdout-in-node-js) – chrwahl Aug 22 '21 at 09:08
  • can you add `shell` script to question? – Amin Taghikhani Aug 22 '21 at 09:16

1 Answers1

0

If you know that output will always have one line (by output I mean returned value from getData()), you can use $(node test.js | tail -n 1) to grab only one last line from node test.js. Otherwise you can do this little hacky workaround by replacing console.log function:

async function getData() {
   let a = 100;
   console.log("Some cosole log");
   console.log("Some other log");
   return a;
}
(async () => {
        console_log = console.log; // Save original function for later
        console.log = ()=>{}; // Replace original with "dummy" function
        console_log(await getData()); // Use saved original to log only what we want
})();

This will work unless some part of code use process.stdout.write to log/print data directly. To avoid this, we can again replace process.stdout.write with some dummy function but since this is likely to break some other things, I would avoid it.

Hackrrr
  • 350
  • 1
  • 4
  • 15