0

I am Using q package for converting my js code from async to sync. I dont know whether my understanding is right or not. i have written the below Snippet

var Q = require('q')

function onMessage() {
    console.log("Before calling Q.fncall");
    Q.fcall(processMessage)
        .then(function () {
            console.log("processMessage execution compleated");
        })
        .done();
    console.log("Calling Q.fncall Compleated");
    return true;
}

function processMessage() {
    var defer = Q.defer();
    console.log("processMessage Entered");
    setTimeout(function () {
        console.log("processMessage processed");
        defer.resolve();
        console.log("processMessage defer Resolved");
    }, 10)
    console.log("ProcessMessage Before Exit");
    return defer.promise;
}
onMessage()

The output of the code is :::: Before calling Q.fncall Calling Q.fncall Compleated processMessage Entered ProcessMessage Before Exit processMessage processed processMessage defer Resolved processMessage execution compleated

But my expectation is to get :::: Before calling Q.fncall processMessage Entered ProcessMessage Before Exit processMessage processed processMessage defer Resolved processMessage execution compleated Calling Q.fncall Compleated

Is there any thing that i was missing or how can this be achieved....

  • Promises aren't intended to turn the code to synchronous. It's impossible to make asyncronous code synchronous. Move all time-sensitive code to `then` and return promises where possible. – Estus Flask Jun 28 '18 at 21:05

1 Answers1

0

This should solve it

var Q = require('q')

function onMessage() {
  console.log("Before calling Q.fncall");
  return new Promise(resolve => {
    Q.fcall(processMessage)
      .then(function () {
        console.log("processMessage execution compleated");
        console.log("Calling Q.fncall Compleated");
      })
      .done(() => resolve(true));
  })
}

function processMessage() {
  var defer = Q.defer();
  console.log("processMessage Entered");
  setTimeout(function () {
    console.log("processMessage processed");
    defer.resolve();
    console.log("processMessage defer Resolved");
  }, 10)
  console.log("ProcessMessage Before Exit");
  return defer.promise;
}

onMessage();
Orkhan Jafarov
  • 215
  • 2
  • 7