从asynchronousJavaScript方法返回值?

我遇到了一个问题,我似乎无法从我在Jquery中运行的asynchronousJavaScript方法获取值。 我的jquery看起来像这样:

$(document).ready( function() { $('#splash_image_upload').change( function() { var file = this.files[0]; var blob_string = create_blob(file); alert(blob_string); }); 

我能够访问来自'onload'事件的值,但我似乎无法返回实际值。 我试过这个:`

 function create_blob(file) { var reader = new FileReader(); reader.onload = (function() { return function(e) { return e.target.result; }; })(); reader.readAsDataURL(file); } 

每次我执行这个函数时,'blob_str'variables的值都是'undefined',可能是因为赋值是在函数完成之前完成的。 我不太清楚如何去做这件事。 有没有一种方法,我可以从这个函数返回这个值?

最好的办法是将callback传递给create_blob并让callback做任何需要做的事情,例如:

 create_blob(file, function(blob_string) { alert(blob_string) }); function create_blob(file, callback) { var reader = new FileReader(); reader.onload = function() { callback(reader.result) }; reader.readAsDataURL(file); } 

asynchronous调用(特别是AJAX)是非常标准的。 你可以连接一些脆弱的计时器,试图同步的力量,但是与API的自然风格战斗是一场失败的战斗。

这是callback的问题。 “答案”将在另一个时刻晚些时候发生,而不是在评估方法的过程中。 这里没什么用处。

您的callback需要处理返回值,使代码看起来更复杂:

 reader.onload = function(e) { // handle here the result // do something with e.target.result };