You are dealing with an asynchronous process, so you cannot directly return a value.
However, you can make a promise . Your function promises to give you this value when it is available. To get value from a promise, you must add a callback function.
You still need to use the callback function, but you no longer need to wipe your functions anymore, you can just serialize them.
It may be a way out of the scope of your current needs, but it is a very interesting concept. Just google if you want to know more.
Here is a quick example:
function my_function() { var promise = new_promise(); do_asynchronous(function callback(result) { promise.resolve(result); // gets called after 1 second }); return promise; } var promise = my_function(); promise.done(function(result) { console.log(result); // prints "yay!" after 1 second }); function new_promise() { var handlers = []; return { "resolve": function (result) { for (var i = 0; i < handlers.length; i += 1) { handlers[i](result); } }, "done": function (a_callback) { handlers.push(a_callback); } }; } function do_asynchronous(callback) { setTimeout(function () { callback("yay!"); }, 1000); }
source share