[英]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.