首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >要同步的Node.js异步

要同步的Node.js异步
EN

Stack Overflow用户
提问于 2013-05-16 19:50:44
回答 5查看 60.1K关注 0票数 27

我怎么才能让它工作呢?

代码语言:javascript
复制
var asyncToSync = syncFunc();

function syncFunc() {
    var sync = true;
    var data = null;
    query(params, function(result){
        data = result;
        sync = false;
    });
    while(sync) {}
    return data;
}

我试图从异步一号获得同步功能,我需要它来使用FreeTds异步查询作为同步一号

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-03-17 03:53:39

使用deasync -一个用C++编写的模块,它将Node.js事件循环暴露给JavaScript。该模块还公开了一个sleep函数,该函数会阻塞后续代码,但不会阻塞整个线程,也不会引起繁忙的等待。您可以将sleep函数放在while循环中:

代码语言:javascript
复制
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;
}
票数 25
EN

Stack Overflow用户

发布于 2016-08-18 04:46:08

现在,这种生成器模式在许多情况下都是一个很好的解决方案:

代码语言:javascript
复制
// 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
票数 12
EN

Stack Overflow用户

发布于 2013-05-16 21:40:18

您可以使用node-sync lib来完成此操作

代码语言:javascript
复制
var sync = require('sync');

sync(function(){
  var result = query.sync(query, params);
  // result can be used immediately
})

注意:您的查询必须使用标准回调调用(错误优先):callback( error,result)。如果不能更改查询方法,只需创建.async()包装器(参见github链接)。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16586640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档