Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何同步调用Q函数_Javascript_Node.js_Synchronization - Fatal编程技术网

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来做任何更改,正如您所建议的那样。您的解决方案比异步/等待更容易实现。