madhur acharya
madhur acharya

Reputation: 29

return a non promise value from a function involving promises

I have a function called "test_sheet" that is supposed to return a value. that value will then be passed to a tester function which will tell me if I passed or failed the test.
inside my "test_sheet" I have a few async operations which are handled by promises. now, how can I return a (non-promise) value from my test_sheet function.

function test_sheet()
{
   //all my logic will go here

   new Promise(function(resolve, reject)
   {
      //simulating an async operation
      setTimeout(() => resolve(true), 1000);
   })
   .then(function(res){return res});
}

function tester()
{
   //not allowed to change this function in any way
   if(test_sheet() == true)
       console.log("pass!");
   else
       console.log("fail!");
}

tester();

Is there any better way of doing this?

Upvotes: 0

Views: 3079

Answers (3)

PJAutomator
PJAutomator

Reputation: 342

test_sheet() always returns a promise so try to get it resolved using async await or .then which feeds into the tester() function.

call you function this way:

test_sheet().then(function(test_sheet){
tester(test_sheet)})

for this you need to pass the boolean return value from test_sheet() to tester(test_sheet)

Upvotes: 0

obba
obba

Reputation: 77

If you handle asynchronous code you have to use promise or callback and handle with async/await to change them to synchronous code

For example

function test_sheet()
{
   //all my logic will go here

   return new Promise(function(resolve, reject) {
      //simulating an async operation
      setTimeout(() => resolve(true), 2000);
   })
}

async function tester()
{
   //not allowed to change this function in any way
   await test_sheet() == true ? console.log("pass!") : console.log("fail!");
}

tester();

Upvotes: -1

tevemadar
tevemadar

Reputation: 13225

Well, technically it is possible, tester() may reamain intact:

var test_sheet=false;
function start_test()
{
   //all my logic will go here

   new Promise(function(resolve, reject)
   {
      //simulating an async operation
      setTimeout(() => resolve(true), 1000);
   })
   .then(res => {
      test_sheet=true;
      tester();
   });
}

function tester()
{
   //not allowed to change this function in any way
   test_sheet == true ? console.log("pass!") : console.log("fail!");
}

//tester();
start_test();

But the test starts with start_test() now, and test_sheet became a variable, with the sole purpose of acting as an argument - which could not be added to testing() without modifying it.
A nonworking bad design is transformed to working bad desing this way.

Upvotes: 2

Related Questions