F.Promise - 循环推理

时间:2015-07-13 08:50:45

标签: java playframework promise

首先,我尝试使用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>
                );
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定为什么它会说“循环推理”,但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());
    });
}