玩 WS API 发出嵌套请求 - WSClient

Play WS API Making nested requests - WSClient

我想使用 play2 WSRequest 发出两个 HTTP 请求 (POST),其中来自第一个响应的一些信息被发送到第二个请求。我尝试按照以下方式执行此操作,以确保第二个请求仅在第一个请求完成后触发。但是我得到 Type mismatch: cannot convert from F.Promise to F.Promise 错误

public Promise<Result>  executeAPI(String apiName,JsonNode requestBody){



    WSRequest pcLoginRequest = ws.url("http://xxxxx.qa.local:8080/mytest/rest/login");
    pcLoginRequest.setContentType("application/json");      
    pcLoginRequest.setHeader("X-x-Password", "xxxxx")
            .setHeader("X-x-Username", "xxxxx")
            .setHeader("X-x-Content-Type", "application/json");

    Promise<Result> myPromise = pcLoginRequest.post("").map(response -> {           


        ProApiSession.getInstanceOf().setProToeken(response.asJson().get("token").asText());


        WSRequest pcrequest = ws.url("http://xxxxx.qa.local:8080/mytest/rest/api/" + apiName);
        pcrequest.setContentType("application/json");       
        pcrequest.setHeader("X-x-Token",ProApiSession.getInstanceOf().getProToeken() )
                .setBody(requestBody)
                .setHeader("X-x-Content-Type", "application/json");


        Promise<Result>  myPromise2 = pcLoginRequest.post(requestBody).map(response2 -> {
                      return Results.ok(response2.asJson());
                });

        return myPromise;

    }); 

有人可以建议如何在游戏中使用 WSRequest 进行嵌套请求。 (导入 play.libs.ws.* )

Java 8 种类型推断错误在最好的时候也是很糟糕的。由于您传递给第一个 map 的 lambda 的结果是 Promise<Result>,因此您尝试分配给 myPromise 的结果是 Promise<Promise<Result>>。您真正想要做的是用 flatMap 替换 map 调用,之所以这样命名是因为 "flattens" 嵌套承诺只是一个承诺。