我目前有这段代码:
package sage.sys;
import com.dongxiguo.continuation.Async;
#if flash
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLLoaderDataFormat;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
#end
class FileSystem implements Async
{
public static function fetchText(url:String, callback:String->Void) : Void
{
var urlLoader = new URLLoader();
var onLoaderError = function(e : Event) : Void {
callback(e.type);
};
urlLoader.addEventListener(Event.COMPLETE, function(_) : Void {
callback(Std.string(urlLoader.data));
});
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onLoaderError);
urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onLoaderError);
try {
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.load(new URLRequest(url));
}
catch (e : Dynamic)
{
callback(Std.string(e));
}
}
@async
public static function fetch(url:String):String
{
var result = @await fetchText(url);
return result;
}
}
当我尝试运行它时,它不等待等待,并从函数返回。如何让@awa实际上强制执行并停止在函数外部运行,直到从异步调用中解析出值?
Lib used: https://github.com/proletariatgames/haxe-continuation
答案 0 :(得分:3)
你真的不可能。您调用fetchText()
的函数将永远不会等待"从那个意义上说。
然而根据" haxe-continuation"的文件。它会将@await FileSystem.fetchText()
表达式之后的所有内容放入一个新函数中,该函数将作为callback
的{{1}}参数传递。所以在代码中它看起来像#34;喜欢它在等待。
根据文档,您必须确保将fetchText()
放在使用@async
的函数前面。根据这样的事情应该工作(未经测试):
fetchText()
函数末尾的2条跟踪应该在获取@async function someFunction(): Void {
var result1 = @await FileSystem.fetchText(someUrl);
var result2 = @await FileSystem.fetchText(anotherUrl);
trace(result1);
trace(result2);
}
和result1
之后发生,即使result2
实际上已经在跟踪之前返回了。
查看调用someFunction()
的代码可能会有所帮助。
答案 1 :(得分:1)
您是如何使用QLabel
功能的?
我想你应该给它回调一下:
row['slink']
var href = row["slink"].trim().length > 0 ? row["slink"] : "javascript:alert('File Not Yet Available')"
'<a href="'+href+'"><button type="button" class="btn btn-info " data-row-id="' + row.id + '">Download</buttn></a> ';
调用本身应立即返回,因为它是异步的,结果将传递给回调。
我不认为可以在提取电话中进行闪存阻止。