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.');
    })
    

    执行结果

     

  • 相关阅读:
    ubuntu apache2配置
    Oauth2协议解读(一)
    OAuth2协议解读(二)
    flask 环境搭建
    BeautifulSoup初识
    Oauth2解读
    5路由控制
    ​1Web应用
    3Web框架
    2Http协议
  • 原文地址:https://www.cnblogs.com/aiv367/p/13299397.html
Copyright © 2011-2022 走看看