. , , recurse(point, otherFunc); - .
( ) ( , , ):
function recurse(startingPlace, otherFunc, callback_one) {
if (your_terminating_criterion === true) {
return callback_one(val);
}
}
, , ( ):
recurse(startingPlace, otherFunc, function (results) {
console.log ("Recursion finished with results " + results);
callback();
});
. , node. node . , . :
var start = function(callback) {
request.get({
url: 'aaa.com'
}, function (error, response, body) {
var startingPlace = JSON.parse(body).id;
recurse(startingPlace, otherFunc, function (results) {
console.log ("Recursion finished with results " + results);
callback();
});
});
};
, . .
, node.js, , , . . results
return callback_one(null, val);
:
recurse(startingPlace, otherFunc, function (recError, results) {
if (recErr) {
return callback();
}
console.log ("Recursion finished with results " + results);
callback();
});
, , get:
function myGet (a, callback) {
request.get(a, function (error, response, body) {
var nextPlace = JSON.parse(body).place;
return callback(null, nextPlace);
});
}
var recurse = function(startingPlace, callback2) {
request.get({
url: 'bbb'
}, function(error1, response1, body1) {
request.get({
url: 'ccc'
}, function(error2, response2, body2) {
var anArray = JSON.parse(body2).stuff;
if (anArray) {
var theParallelCalls = [];
for (var i = 0; i < anArray.length; i++) {
theParallelCalls.push(myGet.bind(null, {url: 'ddd'}));
}
async.parallel(theParallelCalls, function (error3, results) {
for (var i = 0; i < results.length; i++) {
var nextPlace = results[i];
recurse(nextPlace, callback2);
}
});
} else {
return callback2(null);
}
});
});
};
, , get 'bbb' get 'ccc'. , , .