繁体   English   中英

如何根据条件在Node.js中进行同步调用

[英]How to make synchronous calls in Nodejs based on conditions

我正在尝试从API调用的输出创建一个数组集。 所有API调用均基于条件。 我试过下面的代码。

var a = true;
var b = false;
var c = true;


var result = [];

if(a)
{
    callApi("a", function(data){

        result.push(data); //data = this is a

    })
}

if(b)
{
    callApi("b", function(data){

        result.push(data); //data = this is b

    })
}

if(c)
{
    callApi("c", function(data){

        result.push(data); //data = this is c

    })
}


console.log(result);

输出应为

["this is a", "this is c"];

“ b”不应出现在这里,因为条件是错误的。

但是它显示空白数组,因为它不等待回调。

[]

如何使整个过程同步?

如何使整个过程同步?

您绝对不能,应该忘记它。 您已经获得了一系列异步函数,一旦所有异步函数执行完毕,就应该使用这些异步函数的结果。 这就是异步功能的工作方式。

因此,一种可能是使用q模块来使您的callapi函数callapi

function promisify(arg) {
    var deferred = Q.defer();
    callApi(arg, function(data) {
        deferred.resolve(data);
    });
    return deferred;
}

现在您已经完成了,事情变得越来越容易了:

var a = true;
var b = false;
var c = true;
var promises = [];

if (a) {
    promises.push(promisify('a'));
}

if (b) {
    promises.push(promisify('b'));
}

if (c) {
    promises.push(promisify('c'));
}

现在您已经有了promises数组,就像等待所有它们都被结算并简单地使用结果一样简单:

Q.allSettled(promises).then(function(results) {
    // TODO: do something with the results here
    console.log(results);
});

https://github.com/caolan/async

async.series([
    function(callback){
        // do some stuff ...
        callback(null, 'one');
    },
    function(callback){
        // do some more stuff ...
        callback(null, 'two');
    }
],
// optional callback
function(err, results){
    // results is now equal to ['one', 'two']
});

您也可以选择并行或串行处理

在每个函数中,您可以将ur设置为逻辑,如果为true则执行callback(null,res)并将其推入结果数组,如果为false则执行callback(null,null)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM