Spring boot webFlux внутренняя моно не излучающая данные - PullRequest
0 голосов
/ 26 июня 2018

Я новичок в весенней загрузке webflux. Я столкнулся с небольшой проблемой: «userMono не пустой», но эта часть кода выполняет «switchIfEmpty (Mono.just (« hello123 »)))»

Вот мой код

    Mono<String> someMono = serverRequest.bodyToMono(String.class);


    Mono<List<String>> listMsgMono = someMono.flatMap(json -> {
        JSONObject jsonObject = Util.getJsonObjectFromString(jsonString);
        String id = Util.getStringFromJSON(jsonObject, "id");
        JSONArray jsonArray = Util.getJSONArrayFromJSON(jsonObject, "array");
        int length = jsonArray.length();

        for (int index = 0; index < length; index++) {
            String email = Util.getStringFromJSONArray(jsonArray, index);
            LOGGER.debug("email :" + email);
            Mono<User> userMono = repository.findByEmail(email);
            //inner mono is not emmitting data 
            userMono.flatMap(user -> {
                otherRepository.findById(id).flatMap(l -> {
                    return Mono.just("all welcome");
                }).switchIfEmpty(someRepository
                        .findById(id).flatMap(r ->{
                            return Mono.just("all done");
                        }).switchIfEmpty((Mono.just("hello0000"));
                return Mono.just("successfull");
            })
            .switchIfEmpty(Mono.just("hello123"));

        }
        return Mono.just("hello");
    });

1 Ответ

0 голосов
/ 26 июня 2018

Проблема в том, что вы не объединяете операторов в своей реализации. Каждый вызов оператора возвращает новый экземпляр Publisher, и вам необходимо переназначить его переменной, иначе этот оператор не будет учтен в конвейере.

Проверьте этот совет в документации реактора проекта .

...