Una nuova versione per lo scenario in cui il callback verrà chiamato da un'altra funzione, non dal proprio codice, e si desidera aggiungere parametri aggiuntivi.
Ad esempio, facciamo finta di avere molte chiamate nidificate con callback riusciti ed errori. Userò promesse angolari per questo esempio, ma qualsiasi codice javascript con callback sarebbe lo stesso per lo scopo.
someObject.doSomething(param1, function(result1) {
console.log("Got result from doSomething: " + result1);
result.doSomethingElse(param2, function(result2) {
console.log("Got result from doSomethingElse: " + result2);
}, function(error2) {
console.log("Got error from doSomethingElse: " + error2);
});
}, function(error1) {
console.log("Got error from doSomething: " + error1);
});
Ora potresti voler disordinare il codice definendo una funzione per registrare gli errori, mantenendo l'origine dell'errore a scopo di debug. Ecco come procedere per il refactoring del codice:
someObject.doSomething(param1, function (result1) {
console.log("Got result from doSomething: " + result1);
result.doSomethingElse(param2, function (result2) {
console.log("Got result from doSomethingElse: " + result2);
}, handleError.bind(null, "doSomethingElse"));
}, handleError.bind(null, "doSomething"));
/*
* Log errors, capturing the error of a callback and prepending an id
*/
var handleError = function (id, error) {
var id = id || "";
console.log("Got error from " + id + ": " + error);
};
La funzione chiamante aggiungerà comunque il parametro di errore dopo i parametri della funzione di richiamata.