2017-10-13 65 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