Обратные вызовы нужны только при асинхронных неблокирующих вызовах.
var string = "foo",
new_string = enrich(foo);
doStuff(new_string);
Безопасно, если enrich
блокирует. Например
function enrich(str) {
// do regex stuff with str
// manipulate it
return str;
}
блокируется, так что это безопасно. Где, как
function enrich(str) {
// get some data from the database.
// store the string in a file.
return str;
}
Использует неблокирующий ввод-вывод и небезопасен. Что вы хотите сделать, это:
function enrich(str, cb) {
// get some data from the database.
// store the string in a file.
return cb(str);
}
var string = "foo",
new_string = enrich(foo, function (str) {
doStuff(new_string);
});
Обратите внимание, что
enriched = enrichString(regular, sys.puts(data));
Не работает, потому что вы передаете возвращаемое значение sys.puts(data)
в качестве параметра функции (данные также не определены!)
Вам нужно передать функцию.