我怎么才能让它工作呢?
var asyncToSync = syncFunc();
function syncFunc() {
var sync = true;
var data = null;
query(params, function(result){
data = result;
sync = false;
});
while(sync) {}
return data;
}
我试图从异步一号获得同步功能,我需要它来使用FreeTds异步查询作为同步一号
发布于 2014-03-17 03:53:39
使用deasync -一个用C++编写的模块,它将Node.js事件循环暴露给JavaScript。该模块还公开了一个sleep
函数,该函数会阻塞后续代码,但不会阻塞整个线程,也不会引起繁忙的等待。您可以将sleep
函数放在while
循环中:
var asyncToSync = syncFunc();
function syncFunc() {
var sync = true;
var data = null;
query(params, function(result){
data = result;
sync = false;
});
while(sync) {require('deasync').sleep(100);}
return data;
}
发布于 2016-08-18 04:46:08
现在,这种生成器模式在许多情况下都是一个很好的解决方案:
// nodejs script doing sequential prompts using async readline.question function
var main = (function* () {
// just import and initialize 'readline' in nodejs
var r = require('readline')
var rl = r.createInterface({input: process.stdin, output: process.stdout })
// magic here, the callback is the iterator.next
var answerA = yield rl.question('do you want this? ', res=>main.next(res))
// and again, in a sync fashion
var answerB = yield rl.question('are you sure? ', res=>main.next(res))
// readline boilerplate
rl.close()
console.log(answerA, answerB)
})() // <-- executed: iterator created from generator
main.next() // kick off the iterator,
// runs until the first 'yield', including rightmost code
// and waits until another main.next() happens
发布于 2013-05-16 21:40:18
您可以使用node-sync lib来完成此操作
var sync = require('sync');
sync(function(){
var result = query.sync(query, params);
// result can be used immediately
})
注意:您的查询必须使用标准回调调用(错误优先):callback( error,result)。如果不能更改查询方法,只需创建.async()包装器(参见github链接)。
https://stackoverflow.com/questions/16586640
复制相似问题