2017-10-13 38 views
0

我看到了一個看起來像這樣的代碼(Pro Node)。它使用async庫。JS異步庫中的回調參數是做什麼的?

var async = require("async"); 
async.series([ 
    function(callback) { 
    setTimeout(function() { 
     console.log("Task 1"); 
     callback(null, 1); 
}, 300); }, 
    function(callback) { 
    setTimeout(function() { 
     console.log("Task 2"); 
     callback(null, 2); 
    }, 200); 
    }, 
    function(callback) { 
    setTimeout(function() { 
     console.log("Task 3"); 
     callback(null, 3); 
}, 100); } 
], function(error, results) { 
    console.log(results); 
}); 

當我運行它,它表明:

Task 1 
Task 2 
Task 3 
[ 1, 2, 3 ] 

一切都很好 - 但是,我不太明白什麼是回調線:callback(null, 1)callback(null, 2)callback(null, 3)

如果我刪除所有這些行,當我運行的代碼它只返回:

Task 1 

什麼第一和第二個參數做和爲什麼是第二個參數123

+0

你知道什麼回調沒有async.js嗎?你知道本地節點函數中的回調是如何工作的嗎? – Bergi

+0

@Bergi,我不熟悉。我在過去使用'fetch'時使用了回調函數,但是我還沒有探究過它。我不確定這是一個異步的事情還是更廣泛的JavaScript事情。 – Iggy

+0

在這種情況下,您首先需要閱讀更通用的教程 - 那裏有幾十個關於回調如何在nodejs中工作的例子 - 例如[這一個](https://eloquentjavascript.net/20_node.html)。有關節點回調爲何具有兩個參數的信息,請參閱[此問題](https://stackoverflow.com/q/40511513/1048572) – Bergi

回答

1

在異步庫中,調用async.series的回調函數 將運行數組中的下一個函數。第一個參數是任何錯誤數據。這是一個節點約定,任何錯誤都是回調函數的first parameter。第二個參數是成功數據,並作爲所有成功數據的數組傳遞給async.series回調的第二個參數。

有關詳細信息,請參閱this answer以瞭解節點爲何偏好錯誤優先回調。

+0

太棒了。所以第一個參數=錯誤,第二個參數返回。很清楚 - 我現在明白了。非常感謝你!! – Iggy