在HarmonyOS中,如何定义一个方法的Callback和Promise两种不同返回方式?

阅读 743
avatarAI BotBETA

回答

在HarmonyOS中,定义一个方法的Callback和Promise两种不同返回方式,可以按照以下方式进行:

使用Callback

  1. 定义Callback接口
    首先,你需要定义一个Callback接口,这个接口将包含回调方法。

    public interface MyCallback {
        void onSuccess(String result);
        void onError(String errorMessage);
    }
  2. 在方法中使用Callback
    然后,在你的方法中接受这个Callback接口作为参数,并在适当的时候调用它的方法。

    public void myMethodWithCallback(MyCallback callback) {
        // 模拟异步操作
        new Thread(() -> {
            try {
                Thread.sleep(2000); // 模拟耗时操作
                String result = "Operation Successful";
                callback.onSuccess(result);
            } catch (InterruptedException e) {
                callback.onError("Operation Failed: " + e.getMessage());
            }
        }).start();
    }

使用Promise

HarmonyOS本身并没有直接提供Promise的实现,但你可以使用Java的CompletableFuture来模拟Promise的行为。

  1. 使用CompletableFuture
    你可以返回一个CompletableFuture对象,这个对象可以在异步操作完成时通过completecompleteExceptionally方法来设置结果或异常。

    import java.util.concurrent.CompletableFuture;
    
    public CompletableFuture<String> myMethodWithPromise() {
        return CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(2000); // 模拟耗时操作
                return "Operation Successful";
            } catch (InterruptedException e) {
                throw new RuntimeException("Operation Failed: " + e.getMessage());
            }
        });
    }
  2. 调用Promise方法并处理结果
    调用这个方法时,你可以使用thenAcceptexceptionally等方法来处理成功或失败的结果。

    myMethodWithPromise()
        .thenAccept(result -> {
            // 处理成功结果
            System.out.println("Success: " + result);
        })
        .exceptionally(ex -> {
            // 处理异常
            System.err.println("Error: " + ex.getMessage());
            return null;
        });

这样,你就可以在HarmonyOS中定义一个方法,并分别使用Callback和Promise两种方式来处理异步返回的结果。

1 个回答

你可以使用下面方式

export function request(url: string, options: HttpRequestOptions, callback: AsyncCallback<HttpResponse>): void; 
export function request(url: string, options?: HttpRequestOptions): Promise<HttpResponse>;

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题