Node.js 'q'包异步同步



我正在使用q包将我的js代码从异步转换为同步。 我不知道我的理解是否正确。 我已经写了下面的片段

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()

代码的输出为 :::: Before calling Q.fncall Calling Q.fncall Compleated processMessage Entered ProcessMessage Before Exit processMessage processed processMessage defer Resolved processMessage execution compleated

但我的期望是得到 :::: Before calling Q.fncall processMessage Entered ProcessMessage Before Exit processMessage processed processMessage defer Resolved processMessage execution compleated Calling Q.fncall Compleated

我错过了什么,或者如何实现这一点......

这应该可以解决

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();

最新更新