zoukankan      html  css  js  c++  java
  • 按照顺序执行异步函数

    应用 generator 函数,按照顺序依次执行异步方法,打开谷歌浏览器控制台查看结果
     
    /**
    * 按顺序依次执行异步
    * @author 大花猫花大
    * @date 2020-07-14
    * @param {array} processes = [function, ...]
    * @returns {promise}
    */
    function processRun(processes = []) {
    
    	return new Promise((resolve, reject) => {
    
    		//将 processes 数据转成 Generator 函数
    		function* gen(processes) {
    
    			let n = 0;
    			let result; //保留上一次 yield 的执行结果,传递给下一个 yield
    			while (processes[n]) {
    				result = yield new Promise((resolve, reject) => {
    					processes[n](resolve, reject, result);
    				});
    				n++;
    			};
    
    			return;
    
    		}
    
    		function run(gen, data) {
    
    			let next = gen.next(data);
    
    			if (next.done) {
    				resolve(next.value);
    			} else {
    				next.value.then(data => {
    					run(gen, data)
    				});
    			}
    
    		}
    
    		run(gen(processes));
    
    	});
    
    }
    
    //demo
    processRun([
    
    	function (resolve, reject, data) {
    		setTimeout(() => {
    			console.log('step1', data);
    			resolve('step1返回值');
    		}, 1000);
    	},
    
    	function (resolve, reject, data) {
    		setTimeout(() => {
    			console.log('step2', data);
    			resolve(2);
    		}, 2000);
    	},
    
    	function (resolve, reject, data) {
    		setTimeout(() => {
    			console.log('step3', data);
    			resolve(3);
    		}, 1000);
    	}
    
    ]).then(res => {
    	console.log('run over.');
    })
    

    执行结果

     

  • 相关阅读:
    01_3_创建一个Action
    01_2_Namespace命名空间
    01_1_Socket实现
    03_2_JAVA中的面向对象与内存解析
    01_1_Struts环境搭建
    Zabbix通过Orabbix监控Oracle数据库
    Zabbix通过JMX方式监控java中间件
    nginx启用status状态页
    zabbix数据库分表的实现
    配置sudo记录日志
  • 原文地址:https://www.cnblogs.com/aiv367/p/13299397.html
Copyright © 2011-2022 走看看