在同步函数中使用异步函数的值

时间:2014-01-18 22:49:22

标签: javascript

首先,请原谅我糟糕的英语。我不习惯用英文写作。

我正在使用Node.js并且我有变量有时从异步函数中获取它们的值,有时通过直接赋值(例如:

async(function(data) {
    var x= data.something
}; or x = 5;)

问题是后来有共享代码迫使我复制代码。 在同步脚本中,我通常会使用if ... else语句来分隔案例并进行分配。例如:

if(boolivar){
    var x = niceFunc();
}
else {
    var x = 5;
}
coolFunc(x);

现在我被迫对此:

if(boolivar){
    niceFUnc(function(X){
        coolFunc(X);
    }
}
else{
    var x = 5;
    coolFunc(X);
}

有人知道如何解决我的问题吗? 我想过强制异步函数同步但是: 一个。我不知道怎么做 湾这有点毁了整点

2 个答案:

答案 0 :(得分:0)

我倾向于使用这个lib node-sync

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

答案 1 :(得分:0)

我会基本上按照你的方式去做,除了我会抽象同步/异步调用,这样它就不会对使用它的代码产生任何影响,而是忽略坏函数名称;我不知道你的代码是做什么的):

function doNiceFunc(boolivar, callback) {
    if (boolivar) {
        niceFUnc(function(x) {
            callback(x);
        });
    } else {
        callback(5);
    }
}

现在doNiceFunc在外部的两种情况下都是相同的:

doNiceFunc(boolivar, function(x) {
    coolFunc(x);
});

我在一个库中使用了这个确切的模式,该库检索​​有时立即可用的数据,而其他时间必须从网络中检索。这个库的用户不必关心在任何给定时间的情况,因为在这两种情况下调用看​​起来都是一样的。