Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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
Node.js 在异步比赛/赢家通吃比赛中使用第一个结果_Node.js_Asynchronous_Race Condition - Fatal编程技术网

Node.js 在异步比赛/赢家通吃比赛中使用第一个结果

Node.js 在异步比赛/赢家通吃比赛中使用第一个结果,node.js,asynchronous,race-condition,Node.js,Asynchronous,Race Condition,基本上,我想让两个异步调用相互对立,并且只使用获胜者 我似乎不知道怎么做,只知道如何预防。有可能吗 Lame伪代码: //rigging a race function MysqlUser() { setTimeout(function(){ return "mysqluser"; }, 500); } function ADUser() { setTimeout(function(){

基本上,我想让两个异步调用相互对立,并且只使用获胜者

我似乎不知道怎么做,只知道如何预防。有可能吗

Lame伪代码:

//rigging a race
function MysqlUser()
{
        setTimeout(function(){
                return "mysqluser";
        }, 500);
}

function ADUser()
{
        setTimeout(function(){
                return "aduser";
        }, 1000);
}

function getUser()
{
        var user = null;
        user = ADBind();
        user = MysqlBind();
        //if user != null
        return user;
        //else?
}
我希望(在这个例子中)MysqlUser能够战胜ADUser


任何帮助都将不胜感激。

您可以编写一个简单的
first
函数,该函数接收任务列表,并返回第一个完成的任务的结果:

function first(tasks, cb) {
    var done = false;
    tasks.forEach(function(task) {
        task(function(result) {
            if(done) return;
            done = true;
            cb(result);
        });                   
    });
}
然后:


如果您想处理两个操作都失败的问题,可能需要更多的考虑。

您可以编写一个简单的
first
函数,该函数接受一个任务列表,并返回第一个完成的任务的结果:

function first(tasks, cb) {
    var done = false;
    tasks.forEach(function(task) {
        task(function(result) {
            if(done) return;
            done = true;
            cb(result);
        });                   
    });
}
然后:

如果您想处理这两个失败的操作,可能需要更多的思考