You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:22:07