簡體   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