精华内容
下载资源
问答
  • (二 )Service层 , 有两个异步方法,一个是新增日志,带返回值,一个是修改日志,不带返回值 public interface TaskLogService { /** * 插入任务运行日志 * @param taskId * @param projeceSpaceId * @...

    (一)配置类注册成Bean

    package com.supconit.data.integration.service.threadPool;/**
     * Created by dell on 2019/10/24.
     */
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.task.TaskExecutor;
    import org.springframework.scheduling.annotation.EnableAsync;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    
    import java.util.concurrent.ThreadPoolExecutor;
    
    /**
     * @author:huangshichang@supconit
     * @date: 2019-10-24 16:01
     * @desc:线程池配置类
     */
    @Configuration
    @EnableAsync
    public class ThreadPoolConfig {
        @Bean
        public TaskExecutor taskExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            // 设置核心线程数
            executor.setCorePoolSize(5);
            // 设置最大线程数
            executor.setMaxPoolSize(10);
            // 设置队列容量
            executor.setQueueCapacity(20);
            // 设置线程活跃时间(秒)
            executor.setKeepAliveSeconds(60);
            // 设置默认线程名称
            executor.setThreadNamePrefix("hello-");
            // 设置拒绝策略
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
            // 等待所有任务结束后再关闭线程池
            executor.setWaitForTasksToCompleteOnShutdown(true);
            return executor;
        }
    }
    

    (二 )Service层 , 有两个异步方法,一个是新增日志,带返回值,一个是修改日志,不带返回值

    public interface  TaskLogService {
        /**
         * 插入任务运行日志
         * @param taskId
         * @param projeceSpaceId
         * @return
         */
        Future<String> insertTaskLog(Integer taskId, Integer projeceSpaceId);
        /**
         * 修改任务运行日志
         * @param logId
         * @param appendLog
         * @return
         */
        void updateTaskLog(Integer logId,String appendLog);
    }
    

    (三)ServiceImpl层,记得加上@Async注解,taskExecutor这个是刚才线程池生成的bean

    @Service
    public class TaskLogServiceImpl implements TaskLogService {
        @Autowired
        private TaskLogMapper taskLogMapper;
    
        @Async("taskExecutor")
        public Future<String> insertTaskLog(Integer taskId, Integer projeceSpaceId){
            TaskLog taskLog = new TaskLog();
            taskLog.setCreateTime(new Date());
            taskLog.setProjectSpaceId(projeceSpaceId);
            taskLog.setTaskId(taskId);
            taskLogMapper.insertSelective(taskLog);
            return new AsyncResult<String>(taskLog.getId().toString());
        }
    
    
        @Async("taskExecutor")
        public void updateTaskLog(Integer logId, String appendLog){
            TaskLog taskLog =   taskLogMapper.selectByPrimaryKey( logId ) ;
            if ( null != taskLog ){
                String log = (taskLog.getLog() == null) ? "" : taskLog.getLog();
                if (appendLog != null) {
                    log += "\n" + appendLog;
                    taskLog.setLog(log);
                    taskLog.setLastUpdateLog(new Date());
                    taskLogMapper.updateByPrimaryKeyWithBLOBs(taskLog);
                }
            }
        }
    
    }
    
    

    (四)
    想获得异步的返回值,如下
    Future future = taskLogServiceImpl.insertTaskLog(taskId,projectSpaceId);
    String taskLogId = future.get();

    展开全文
  • 循环中调用异步接口获取数据

    千次阅读 2020-07-17 10:07:33
    遇到这样一个需求:调用接口,返回一个新闻列表,再循环这个新闻列表,用每个新闻的id异步请求这个新闻的视频地址,这就需要在循环里调用接口。如果用for循环,接口还没请求完成,for循环就已经执行完了。所以改成...

    前言

    遇到这样一个需求:调用接口,返回一个新闻列表,再循环这个新闻列表,用每个新闻的id异步请求这个新闻的视频地址,这就需要在循环里调用接口。如果用for循环,接口还没请求完成,for循环就已经执行完了。所以改成promise去处理。

    开始

    整体思路就是:先存数组,然后循环生成每一个promise,然后用promise.all来调用,then的时候返回的是一个结果数组。

    1、首先定义循环里的异步请求

    getInfo(item ,index){
    			return new Promise((resolve,reject) => {
    				axios.post('/videoUrl',{id:item.id}).then(res=>{
    					let url = res.data;
    					resolve({id:item.id,url:url})
    				})
    			})
    		}
    

    2、newsList为开始接口获取的新闻列表,对新闻列表进行循环,得到一个promise数组。

    let promiseArr = this.newsList.map((item,index) => {
    				    return this.getInfo(item, index)
    				 })
    

    3、用promise.all来调。

    Promise.all(promiseArr).then(value=>{
    						console.log(value);
    					 //value:[{id: 1, url: "xxxxx"},
    					// 		  {id: 2, url: "xxxxx"},
    					// 		  {id: 3, url: "xxxxx"}]
    						this.newsList = value;
    					})
    

    这样就拿到了包含新闻视频地址的新闻列表。

    全部代码

    <script>
    export default {
    	name: 'empty',
    	data () {
    		return {
    			newsList:[]//新闻列表
    		}
    	},
    	methods:{
    			getNewsList(){
    				axios.get('/newsList').then(res=>{
    					this.newsList = res.data;//newsList = [{id:1},{id:2},{id:3}];
    					let promiseArr = this.newsList.map((item,index) => {
    						return this.getInfo(item, index)
    					})
    					Promise.all(promiseArr).then(value=>{
    						console.log(value);
    					 //value:[{id: 1, url: "xxxxx"},
    					// 		  {id: 2, url: "xxxxx"},
    					// 		  {id: 3, url: "xxxxx"}]
    						this.newsList = value;
    					})
    				})
    			},
    			// 通过新闻id请求新闻视频地址
    			getInfo(item ,index){
    				return new Promise((resolve,reject) => {
    					axios.post('/videoUrl',{id:item.id}).then(res=>{
    						let url = res.data;
    						resolve({id:item.id,url:url})
    					})
    				})
    			}
    	},
    	mounted(){
    		this.getNewsList();
    	}
    }
    </script>
    

    后记

    1、首先关于后台修改接口,正常返回应该是newsList里就返回了视频地址,协商过就是需要单独去调用。
    2、这个问题的解决花费了时间,特此记录。文章参考javascript for循环+异步请求导致请求顺序不一致

    展开全文
  • 循环中,调用异步接口获取数据

    千次阅读 2019-02-12 14:06:00
    问题描述:for循环中,异步调用后端接口无效(同时执行所有任务,导致页面卡死) 提示:循环不能是异步的,for循环是同步任务,内部的异步任务会在for循环执行完成后执行 解决方法:循环中使用递归。使用递归函数...

    问题描述:for循环中,异步调用后端接口无效(同时执行所有任务,导致页面卡死)

    提示:循环不能是异步的,for循环是同步任务,内部的异步任务会在for循环执行完成后执行

    解决方法:循环中使用递归。使用递归函数在事件循环的单独轮次中执行迭代,在事件循环的单独轮次中执行递归,不会导致调用栈溢出。

    ()事件循环的每个轮次中调用其他事件处理程序的调用栈最初是空的)

     

    这个问题涉及事件循环:

    1、所有同步任务都在主线程上执行,形成一个“执行栈”

    2、主线程之外,还存在一个“任务队列”,只要异步任务有了结果,就在“任务队列”中放置一个事件

    3、一旦执行栈的所有同步任务完成,系统就读取“任务队列”对应异步任务,结束等待状态,进入执行栈,开始执行(执行异步回调)

    4、主线程不断重复(3)步骤

     

    转载于:https://www.cnblogs.com/shuhaonb/p/10364896.html

    展开全文
  • 因为异步接口是异步执行,主线程的函数都执行完才执行异步执行栈中的函数,所以要想在异步接口获取数据后在其他函数中使用该数据需要在内部写callback回调函数。(将异步接口改为同步也是一种方式,但是不推荐,同步...

    因为异步接口是异步执行,主线程的函数都执行完才执行异步执行栈中的函数,所以要想在异步接口获取数据后在其他函数中使用该数据需要在内部写callback回调函数。(将异步接口改为同步也是一种方式,但是不推荐,同步容易造成页面假死)
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 多线程异步调用接口数据同步问题

    千次阅读 2019-08-27 18:16:00
    在多线程进行接口调用时如果调用接口执行时间不同会直接跳过慢的接口,导致最终数据出错。 PrintUtil类模拟被调用的2个接口方法 ThreadDemo类是多线程的实现类 Test类是调用方。 注释掉f1.join()时执行结果:...
  • 在企业微信下取消调用异步接口返回的数据拼接到return出去的path中。 在微信小程序下逻辑不变。 在微信小程序下。 onShareAppMessage可写成async函数。但在企业微信中不支持。分享会走默认分享-即当前窗口截图和当前...
  • Java接口异步调用

    千次阅读 2017-10-12 07:49:47
    java接口调用从调用方式上可以分为3类:同步调用,异步调用,回调;同步调用基本不用说了,它是一种阻塞式的调用,就是A方法中直接调用方法B,从上往下依次执行。今天来说说异步调用。 什么是异步调用? 我的理解...
  • dubbo--异步调用服务接口

    千次阅读 2019-02-14 11:38:18
    我们知道,Dubbo缺省协议采用单一长连接,底层实现是Netty的NIO异步...当服务端提供的服务耗时过长,客户端采用异步调用服务端接口,这样能有效利用客户端资源 服务提供端:接口方法延迟3秒 @Service(value =...
  • 在工作中遇到了一个for循环调用接口的例子:首先要根据一个集群ID,去调用接口查询此集群下的所有“命名空间”,接着再用for循环来一个个查询所有“命名空间”下的“实例”,eg: namespaceService.getNamespaceList...
  • a在调用b方法的时候,b方法先返回一个“正在处理,请稍后” 的默认返回值,然后b方法中异步调用c方法,c方法上贴了@async这个spring的注解,c方法执行完之后将结果封装到asyncResult中返回给b,请问,b在获取到c的...
  • js中的map方法内使用异步调用接口)js中的map方法内使用异步调用接口) 2019/08/13 js中的map方法内使用异步调用接口) map方法里执行的是同步函数,若是想要使用异步,可以使用关键字async await 直接贴代码...
  • 页面上要渲染的表格数据是由很多个接口返回的数据拼成的,并且数据量相当大,甚至几千几万条,一般人想着如下方式处理,eg:var datas = []; service.getNames(a,b,...其它参数).then( function(response){ for(var...
  • 同步调用与异步调用

    千次阅读 2018-03-21 12:01:13
    异步调用就是客户端不等待调用执行完成返回结果,不过依然可以通过回调函数等接收到返回结果的通知。如果客户端并不关心结果,则可以变成一个单向的调用。这个过程有点类似于Java中的callable和runnable接口,我们...
  • 问题描述: ...思路:使用Promise,将调用接口的函数转变为一个Promise对象,定义全局变量数组,在循环中将Promise对象push到数组中,然 后用Promise.all()执行接口调用,在调用成功后执行绘图操...
  • 我在做项目的时候遇到这个问题,调用后台接口获取数据赋值给数组列表并且重新渲染DOM元素内容 其实是想通过js给DOM元素...我觉得应该是调用接口获取数据是异步操作,所以此时获取不到元素,我就在获取子元素的外边套了
  • 在java平台,实现异步调用的角色主要三种角色:调用者、取货凭证、真实数据。本篇文章给大家介绍java实现异步调用实例代码,需要的朋友可以参考下
  • Dubbo的异步调用

    2020-06-13 16:39:20
    文章目录dubbo异步调用2.6版本中dubbo异步调用的实现2.7版本dubbo 客户端Consumer异步调用使用CompletableFuture签名的接口1、调用远程服务:2、 使用RpcContext2.7 版本 服务提供者Provider异步执行1、定义...
  • 后端人员给我接口,让我直接调用接口获取json数据追加到页面上怎么弄?求教各位
  • wait操作 get操作 std::future使用 std::async是C++11 标准库提供的一个同步或者异步执行函数模板(简单理解就是发起同步或者异步函数调用),它和std::future配合使用,std::future用于获取同步异步执行结果(简单...
  • 研究Webservice异步调用的实现, 1、通过异步调用的方式实现高性能的使用WebService的API
  • HSF异步调用

    千次阅读 2015-05-18 17:24:30
    1.引入 ... 但是有些是不需要一直等待服务端返回结果的,对于这些服务,hsf提供异步调用的方式,让客户端不必同步阻塞在hsf操作上 2.异步调用  (1)说明  异步调用在发起调用时,HSF
  • Springboot异步调用 全解析

    千次阅读 2018-10-23 17:34:03
    本文主要介绍Springboot异步调用,包括: 1、Springboot同步调用演示;...5、利用Future获取异步子线程的执行结果; 6、Springboot使用注解异步调用与事务一起使用时的注意事项; 7、Springboot异步调用时多线...
  • 解决:小程序首页接口调用app.js中异步调用返回的值原因解决办法 原因 因为app.js中的onLaunch是异步的,当小程序首页打开的时候,app.js中在onLaunch里的接口还没有通没有返回值,也就没有办法设置相应的globalData...
  • 主要为大家详细介绍了SpringBoot异步调用方法并接收返回值,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 关于使用 @Async实现异步调用的内容,也得到不少童鞋的反馈,其中问题比较多的就是关于返回 Future的使用方法以及对异步执行的超时控制,所以这篇就来一起讲讲这两个问题的处理。   如果您对于 @Async注解的...
  • 如何在 Spring 异步调用中传递上下文

    千次阅读 2019-08-01 22:19:28
    什么是异步调用异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行。异步调用指,在程序在执行时,...
  • Java异步调用模式

    千次阅读 2017-01-11 16:36:58
    Java异步调用模式 在长期的Java客户端开发中,最常见的一个客户端调用模式就是Java的异步调用。所谓异步调用其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的方法。在Java语言中,简单的讲就是另启...
  • 最近研究了一下异步调用,接下来几篇博客是跟异步调用相关的,首先使用@FunctionalInterface接口实现一个简单的步调用,也就是本篇博客主要内容。 然后再加上ZMQ,实现一个带网络通信的异步调用。再下一步就是复杂...
  • 异步调用WebService

    千次阅读 2012-10-15 15:42:57
    但是如果采用异步调用的方式将能使这个问题得到有效的解决,让客户端在发出请求之后的等待时间里去做其他的事情而不是一直在那里呆呆在等待。 对异步调用的理解: 说白了异步调用其实就是调用者线程和执行被调用...
  • 本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊。  首先,通过代码定义一个委托和下面三个示例将要调用的方法:   public ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 221,745
精华内容 88,698
关键字:

异步调用接口获取结果