Javascript 在syncronius函数中使用asyncronius函数中的值

Javascript 在syncronius函数中使用asyncronius函数中的值,javascript,Javascript,首先,请原谅我英语不好。我不习惯用英语写作 我使用的是Node.js,变量有时从异步函数获取值,有时通过直接赋值获得值,例如: async(function(data) { var x= data.something }; or x = 5;) 问题是,以后我会共享代码,这迫使我复制代码。 在syncronius脚本中,我通常执行if。。else语句来分隔案例并分配。例: if(boolivar){ var x = niceFunc(); } else { var x

首先,请原谅我英语不好。我不习惯用英语写作

我使用的是Node.js,变量有时从异步函数获取值,有时通过直接赋值获得值,例如:

async(function(data) {
    var x= data.something
}; or x = 5;)
问题是,以后我会共享代码,这迫使我复制代码。 在syncronius脚本中,我通常执行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);
}
有人知道如何解决我的问题吗? 我曾考虑强制异步函数同步,但: A.我不知道怎么做 B这有点破坏了整个观点

我倾向于使用这个库


基本上,我会像您那样做,只是我会抽象sync/async调用,这样就不会对使用它的代码造成任何影响。幕后真正发生的事情忽略错误的函数名;我不知道你的代码是做什么的:

function doNiceFunc(boolivar, callback) {
    if (boolivar) {
        niceFUnc(function(x) {
            callback(x);
        });
    } else {
        callback(5);
    }
}
现在,从外部看,doNiceFunc在两种情况下都是相同的:

doNiceFunc(boolivar, function(x) {
    coolFunc(x);
});
我在一个库中使用了这个确切的模式,该库检索到的数据有时是立即可用的,有时则必须从网络中检索。这个库的用户在任何给定的时间都不必关心这种情况,因为这两种情况下的调用看起来是一样的

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