当前位置: 首页 > news >正文

网站图片怎么替换做简历用的网站

网站图片怎么替换,做简历用的网站,网上做网站网站代理,成都青白江网站建设react回调我可以更好地了解a的用途的一种方式 基于React流的方法是它简化了无阻塞IO调用的方式。 这篇文章将快速讲解进行同步远程调用所涉及的那种代码#xff0c;然后说明如何在非阻塞IO中分层#xff0c;尽管在资源#xff08;尤其是线程#xff09;的使用方面非常高效… react回调 我可以更好地了解a的用途的一种方式 基于React流的方法是它简化了无阻塞IO调用的方式。 这篇文章将快速讲解进行同步远程调用所涉及的那种代码然后说明如何在非阻塞IO中分层尽管在资源尤其是线程的使用方面非常高效但会带来复杂性称为回调地狱和基于React流的方法如何简化编程模型。 目标服务 由于我将编写一个客户呼叫因此代表城市详细信息的目标服务有两个端点。 当使用uri类型的“ / cityids”调用时返回一个城市ID的列表结果示例如下 [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ] 端点返回给定城市ID的城市的详细信息例如当使用ID 1 –“ / cities / 1”进行调用时 { country : USA , id : 1 , name : Portland , pop : 1600000 } 客户的责任是获取城市ID的列表然后为每个城市ID获取城市的详细信息并将其放到城市列表中。 同步通话 我正在使用Spring Framework的RestTemplate进行远程调用。 Kotlin函数获取城市ID列表如下所示 private fun getCityIds(): ListString { val cityIdsEntity: ResponseEntityListString restTemplate .exchange( http://localhost: $localServerPort/cityids , HttpMethod.GET, null , object : ParameterizedTypeReferenceListString() {}) return cityIdsEntity.body!! } 并获取城市的详细信息 private fun getCityForId(id: String): City { return restTemplate.getForObject( http://localhost: $localServerPort/cities/$id , City:: class .java)!! } 给定这两个功能可以很容易地将它们组合起来以便返回城市列表 val cityIds: ListString getCityIds() val cities: ListCity cityIds .stream() .mapCity { cityId - getCityForId(cityId) } .collect(Collectors.toList()) cities.forEach { city - LOGGER.info(city.toString()) } 该代码非常易于理解但是涉及8个阻塞调用– 1.获取7个城市ID的列表然后获取每个城市的详细信息 2.获取七个城市中每个城市的详细信息 这些调用中的每一个都会位于不同的线程上。 结合使用非阻塞IO和回调 我将使用一个名为AsyncHttpClient的库进行非阻塞IO调用。 进行远程调用时AyncHttpClient返回一个ListenableFuture类型。 val responseListenableFuture: ListenableFutureResponse asyncHttpClient .prepareGet( http://localhost: $localServerPort/cityids ) .execute() 可以将回调附加到可监听的将来以便在可用时对响应进行操作。 responseListenableFuture.addListener(Runnable { val response: Response responseListenableFuture.get() val responseBody: String response.responseBody val cityIds: ListLong objectMapper.readValueListLong(responseBody, object : TypeReferenceListLong() {}) .... } 给定城市ID列表我想获取城市的详细信息因此从响应中我需要进行更多的远程调用并为每个调用附加一个回调以沿以下方向获取城市的详细信息 val responseListenableFuture: ListenableFutureResponse asyncHttpClient .prepareGet( http://localhost: $localServerPort/cityids ) .execute() responseListenableFuture.addListener(Runnable { val response: Response responseListenableFuture.get() val responseBody: String response.responseBody val cityIds: ListLong objectMapper.readValueListLong(responseBody, object : TypeReferenceListLong() {}) cityIds.stream().map { cityId - val cityListenableFuture asyncHttpClient .prepareGet( http://localhost: $localServerPort/cities/$cityId ) .execute() cityListenableFuture.addListener(Runnable { val cityDescResp cityListenableFuture.get() val cityDesc cityDescResp.responseBody val city objectMapper.readValue(cityDesc, City:: class .java) LOGGER.info( Got city: $city ) }, executor) }.collect(Collectors.toList()) }, executor) 这是一段粗糙的代码在一个回调中有一组回调很难对此进行推理和理解因此被称为回调地狱。 在Java CompletableFuture中使用非阻塞IO 通过返回Java的CompletableFuture作为返回类型而不是ListenableFuture可以对代码进行一些改进。 CompletableFuture提供允许修改返回的返回类型的运算符。 例如考虑使用函数获取城市ID列表 private fun getCityIds(): CompletableFutureListLong { return asyncHttpClient .prepareGet( http://localhost: $localServerPort/cityids ) .execute() .toCompletableFuture() .thenApply { response - val s response.responseBody val l: ListLong objectMapper.readValue(s, object : TypeReferenceListLong() {}) l } } 在这里我使用“ thenApply”运算符将“ CompletableFuture Response”转换为“ CompletableFuture List Long ” 并类似地获得城市的详细信息 private fun getCityDetail(cityId: Long): CompletableFutureCity { return asyncHttpClient.prepareGet( http://localhost: $localServerPort/cities/$cityId ) .execute() .toCompletableFuture() .thenApply { response - val s response.responseBody LOGGER.info( Got {} , s) val city objectMapper.readValue(s, City:: class .java) city } } 这是基于回调方法的改进但是CompletableFuture缺少足够的运算符例如在这种特定情况下需要将所有城市详细信息放在一起 val cityIdsFuture: CompletableFutureListLong getCityIds() val citiesCompletableFuture: CompletableFutureListCity cityIdsFuture .thenCompose { l - val citiesCompletable: ListCompletableFutureCity l.stream() .map { cityId - getCityDetail(cityId) }.collect(toList()) val citiesCompletableFutureOfList: CompletableFutureListCity CompletableFuture.allOf(*citiesCompletable.toTypedArray()) .thenApply { _: Void? - citiesCompletable .stream() .map { it.join() } .collect(toList()) } citiesCompletableFutureOfList } 我使用了一个名为CompletableFuture.allOf的运算符该运算符返回“ Void”类型并且必须强制返回所需的“” CompletableFuture List City 类型。 使用Project Reactor Project Reactor是Reactive Streams规范的实现。 它有两种特殊类型可返回0/1项目流和0 / n项目流–前者是Mono后者是Flux。 Project Reactor提供了一组非常丰富的运算符这些运算符允许以多种方式转换数据流。 首先考虑该函数以返回城市ID列表 private fun getCityIds(): FluxLong { return webClient.get() .uri( /cityids ) .exchange() .flatMapMany { response - LOGGER.info( Received cities.. ) response.bodyToFluxLong() } } 我正在使用Spring出色的WebClient库进行远程调用并获得ProjectReact器“ Mono ClientResponse”类型的响应可以使用“ flatMapMany”运算符将其修改为“ Flux Long”类型。 在给定城市ID的情况下按照相同的步骤获取城市的详细信息 private fun getCityDetail(cityId: Long?): MonoCity { return webClient.get() .uri( /cities/{id} , cityId!!) .exchange() .flatMap { response - val city: MonoCity response.bodyToMono() LOGGER.info( Received city.. ) city } } 在这里使用“ flatMap”运算符将项目React堆“ Mono ClientResponse”类型转换为“ Mono City”类型。 以及从中获取城市ID和城市的代码 val cityIdsFlux: FluxLong getCityIds() val citiesFlux: FluxCity cityIdsFlux .flatMap { this .getCityDetail(it) } return citiesFlux 这非常具有表现力-对比了基于回调的方法的混乱和基于响应流的方法的简单性。 结论 在我看来这是使用基于响应流的方法的最大原因之一尤其是在涉及跨越异步边界的场景例如在这种情况下进行远程调用的情况下尤其是Project Reactor。 它清除了各种回调和回调地狱并提供了使用一组丰富的运算符修改/转换类型的自然方法。 我在这里使用的所有示例的工作版本的存储库位于https://github.com/bijukunjummen/reactive-cities-demo/tree/master/src/test/kotlin/samples/geo/kotlin 翻译自: https://www.javacodegeeks.com/2019/06/callback-hell-reactive-patterns.htmlreact回调
http://www.pierceye.com/news/97692/

相关文章:

  • 进网站备案大学生网页设计心得体会
  • 做网站除了广告还有什么收入的短视频营销的发展趋势
  • 企顺网网站建设娜娜视频免费视频在线
  • 如何做英文网站wordpress 247
  • 玄武模板网站制作点击查看视联网视频会议系统
  • 域名购买之后怎么做网站网站二级页面设计要求
  • 一个好的网站怎样布局安康市网站建设
  • 上海企业网站优化多少钱湛江网站建设方案托管
  • 手机网站可以做英文版本吗怎么自己购买域名 建设网站
  • 茂港手机网站建设公司如何将音乐上传到wordpress
  • 做房地产网站wordpress 文章页面模板
  • 深圳做app网站建设网站申请支付宝支付
  • 巴音郭楞库尔勒网站建设知名企业门户网站建设
  • 免费域名申请哪个网站好去除wordpress 广告插件
  • 塘厦做网站定制和订制有什么区别
  • 昆明网站空间好习惯网站
  • 做导航网站赚钱吗建立网站需要多少钱费用
  • 大同网站建设哪家好网站后台登录模板html
  • 网站建设过程中准备的工作手机制作网站
  • 做专业网站设计多少钱代理小企业网站建设
  • 怎样提升网站关键词免费的html模版下载
  • 栖霞网站定制三合一建站网站
  • 免费建立一个个人网站设计官网登录入口
  • 门户网站模板之家北京网上服务平台
  • 合肥网站优化方案东莞做网站那家好
  • 个人备案网站可以做论坛吗山东住房建设厅官网站首页
  • 寺院网站模板网站策划制作公司 北京
  • 昆山教育云平台网站建设宁晋县建设局网站
  • 廊坊网站公司dw做网站背景音乐
  • 阜南做网站搜索引擎优化seo多少钱