gpt4 book ai didi

javascript - Haxe 宏 - 将 "function"替换为 "async function"

转载 作者:行者123 更新时间:2023-12-03 09:56:12 24 4
gpt4 key购买 nike

我希望在转换 haxe 时至JavaScript , 异步被添加到它的方法中。
我有 Haxe代码:

@:expose
class Main implements IAsync {
static function main() {
trace("test");
}

static function testAwait() {
return 1;
}
}

而这段代码被转换成这样的代码:
. . .
Main.testAwait = function() {
return Main.test();
};
. . .

我希望能够替换 functionasync function在这段代码中。
例如:
Main.testAwait = async function() {
return Main.test();
};

但我只能更改方法的名称,例如代码宏:
package haxe_test;

import haxe.macro.Expr;
import haxe.macro.Context;
using haxe.macro.Tools;
using haxe_test.AsyncBuilder;

class BuildHub {
macro static public function build():Array<Field> {
var fields = Context.getBuildFields();
var testFunc:Function = {
expr: macro return $v{1},
ret: null,
params: [],
args: []
};

fields.push({
name: "testAwait",
access: [Access.AStatic],
kind: FieldType.FFun(testFunc),
pos: Context.currentPos(),
});
return fields;
}

如何更换 functionasync function ?
UPD:我简化了代码。也许任何选项编译器或 JSGenApi 可以帮助我)?

最佳答案

不确定您是否考虑过更简单的事情,但在 Haxe 4 中您可以执行以下操作:

class Test {
static function main() {
var value = await( async(testAsync) );
trace(value);
}

static function testAsync() return 1;

static inline function await<T>(fn:Void->Void):T {
return js.Syntax.code("await {0}()", fn);
}
static inline function async<T>(fn:Void->Void):T {
return js.Syntax.code("async () => {0}()", fn);
}
}

或同时进行:
class Test {
static function main() {
var value = asyncAwait( testAsync );
trace(value);
}

static function testAsync() return 1;

static inline function asyncAwait<T>(fn:Void->Void):T {
return js.Syntax.code("(async () => { await {0}() })()", fn);
}
}

关于javascript - Haxe 宏 - 将 "function"替换为 "async function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59364696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com