簡體   English   中英

F.Promise-循環推斷

[英]F.Promise - cyclic inference

一開始,我嘗試使用Result進行投射

(Result) deleteDummy().

它將使您無法投射。

但是當我更改為ok()時,它說循環推斷

我在這里有點困惑。 它一直說循環推斷。 看來退貨不兼容...。有什么幫助嗎?

public class Delete_Dummy {
    public static F.Promise<Result> delete() {

        F.Promise<Boolean> promise = isDummyThere(); //rest call to check the exist of the dummy

      return promise.map(aBoolean ->
      {
          if(!aBoolean) {
                return badRequest("No..i'm not there");
          }
          return deleteDummy().map(result-> ok()); //<=cyclic inference <<<<
      });
    }

    private static F.Promise<Result> deleteDummy() {
        String url = "some url";
        return WS.url(url)
                .delete()
                .map(response -> {
                    if (response.getStatus() == NO_CONTENT) {

                        return ok("OK..deleted");
                    }
                    return badRequest("you are bad.");
                } // end of Function<WS>
                );
    }
}

我不確定為什么會說“循環推斷”,但是badRequest()似乎具有Result類型,而deleteDummy().map(result-> ok())確實具有Promise<Result>類型。 它們彼此不兼容。

如果您有一個回調,該回調本身會產生承諾的結果,則必須使用flatMap 您可以通過使用pure將它與if-else中的非承諾值組合:

public static F.Promise<Result> delete() {
    F.Promise<Boolean> promise = isDummyThere(); //rest call to check the exist of the dummy

    return promise.flatMap(aBoolean -> {
        if (!aBoolean) {
            return F.Promise.pure(badRequest("No..i'm not there"));
        }
        return deleteDummy().map(result-> ok());
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM