Nodejs / Async:如何在代码片段中提到的async.map的iteratee函数中如何工作?

作为nodejs和async的新手,以下是我遇到的代码。

app = express(); /* other express use calls like - app.use(bodyParser.json()); */ var async = require("async"); var server; app.post('/callType/call', function(req, res) { var startTime = Date.now(); server = req.body.server; //async.map asynchronuously call enrollStep1 for every element in the req.body.nodes array //HOW DOES THIS WORK??!! - WHERE IS THE CALLBACK DEFINED OR SOURCED FROM??? //****************************************************** async.map(req.body.nodes, function(node, callback) { someFunc(node.property1,node.property2,callback) }, //This function is called when every task triggered by async.map has called its callback. function(err, results) { var response = {}; if (err) { response.success = false; response.error = err; console.log("ERROR returned: " + JSON.stringify(response)); res.json(response); } else { var returnResults = []; //Results is an array of array - flatten it var flattenedResults = [].concat.apply([], results); //then remove duplicates for (var i = 0; i < flattenedResults.length; i++){ var obj = flattenedResults[i]; var isDup = returnResults.some(function(element) { return element.tid === obj.tid; }); if (!isDup) { returnResults.push(obj); } } response.success = true; response.results = returnResults; res.json(response); } }); }); function someFunc(property1, property2, callback) { var url = '/'+callTypes +'/'+ call +'/'+ property1 +'/'+ property2 urClient .get(server + url) .header('Content-Type', 'application/json') .end( function(response) { if (response.code !== 200) { callback("Error " + ". Code: " + response.code + " Response: " + JSON.stringify(response)); } else { callback("Success " + ". Code: " + response.code + " Response: " + JSON.stringify(response)); } } ); } 

async.map的iteratee函数有一个定义开始函数(node,callback){但是callback函数从来没有被赋值。 callback如何在这里工作。

它不应该被分配的地方像callback = myCallbackFunction;

async.map需要3个参数,数组/对象,映射数据的函数和callback函数,所以你的代码应该是:

 async.map(req.body.nodes, someFunc , function(err, results) { if (err) return console.log(err); console.log(results); }); 

你的someFunc应该是:

 function someFunc(item, callback) { // do something with item // it's each item in the original array/object callback('The results'); } 

这是一个基本的例子: http : //code.runnable.com/UyR-6c2DZZ4SmfSh/async-map-example-for-node-js