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