如何在TMS WEB Core中调用Delphi标记的async函数?
TMS WEB Core Async函数调用问题解答
一、什么是Context?
在TMS WEB Core中,标记[async]的函数并不会直接返回你声明的Boolean类型值,而是返回一个Context对象(它是JavaScript Promise的封装)。这个Context代表异步操作的执行上下文,只有当异步操作完成后,才能从中获取实际的返回结果。你直接将其用于Boolean类型的判断逻辑,编译器会因类型不匹配报错,也就是提示的「Boolean expected, but Context found」。
二、正确调用Async函数的方式
在TMS WEB Core中调用异步函数必须遵循异步编程规范,常用两种方式:
1. 在异步函数内使用await关键字
如果调用代码本身处于一个标记[async]的函数中,可以用await等待异步函数执行完成,直接获取返回值:
[async] procedure CallMyAsyncFunc(); begin if await MyAsyncFunction then begin // 执行你的逻辑 end; end;
注意:await只能在标记[async]的函数内部使用,普通同步函数无法直接使用。
2. 在同步函数内使用OnComplete回调
如果需要在普通同步函数中调用异步函数,可通过Context的OnComplete回调处理结果:
procedure SyncCaller(); var AsyncCtx: TContext<Boolean>; begin AsyncCtx := MyAsyncFunction(); AsyncCtx.OnComplete := procedure(AResult: Boolean; AError: Exception) begin if Assigned(AError) then begin // 处理异步操作中的错误 Exit; end; if AResult then begin // 执行你的逻辑 end; end; end;
TContext<Boolean>是对应返回值类型的上下文对象,异步操作完成后会触发OnComplete回调,你可以在回调中获取结果或处理异常。
内容的提问来源于stack exchange,提问作者Shaun Roselt
相关产品推荐
相关产品推荐

