Javascript 如何同步调用Q函数
我有一个功能:Javascript 如何同步调用Q函数,javascript,node.js,synchronization,Javascript,Node.js,Synchronization,我有一个功能: const Q = require('q'); const timers = require('timers'); function _testQ() { const deferred = Q.defer(); console.log('test timer event 1s.'); let t = timers.setInterval(() => { console.log('Timer event!'); tim
const Q = require('q');
const timers = require('timers');
function _testQ() {
const deferred = Q.defer();
console.log('test timer event 1s.');
let t = timers.setInterval(() => {
console.log('Timer event!');
timers.clearInterval(t);
deferred.resolve(true);
}, 1000);
return deferred.promise;
}
let out = _testQ().then((n) => {
console.log('Debug1 n:', n);
});
console.log('Debug2 ', out);
如何以syncronios的方式调用它
我得到如下输出:
test timer event 1s.
Debug2 { state: 'pending' }
Timer event!
Debug1 n: true
我需要这样打印:
test timer event 1 s.
Timer event!
Debug1 n: true
Debug2 {state: 'pending'}
如果你想在Debug1之后执行Debug2,你需要一个额外的
let out = _testQ()
.then((n) => {
console.log('Debug1 n:', n);
})
.then(() => {
console.log('Debug2 ');
});
尝试模拟它,使用虚拟对象而不是实际对象进行测试,或者使用
stub
then函数。如果需要全部同步,则可能需要使用co
和yield
或async
和wait
。我的应用程序中有一个非常复杂的逻辑,因此这不是一个选项。在这个问题上,这只是一个例子。我正在尝试使用async和Wait来实现这一点。从您的问题来看,这并不清楚。另外,async/await基本上只是承诺处理的语法糖。因此,如果您可以使用async/Wait做任何事情,那么您也可以使用“旧”承诺chainingThx@Nicolas来做任何更改,正如您所建议的那样。您的解决方案比异步/等待更容易实现。