• 循环异步代码处理


    let info = [ '北京', '上海', '香港', '日本', '纽约', '韩国'];
    // 方案一 递归完成所有的数据遍历计算,且保证了执行的顺序
    let milkCount = 0;
    let finish = new Subject<any>();
    function computeMilk (i) {
        if ( i<2 ) {
            // 同步
            milkCount = milkCount + 1;
            if (i < info.length - 1){
                computeMilk(i+1);
            } else { // 结束后返回一个标志
                return { milkCount: milkCount};;
            }
        } else {
            // 异步
            setTimeout(() => {
                milkCount = milkCount + i;
                if (i < info.length - 1){
                    computeMilk(i+1);
                } else {
                    finish.next('finish');
                }
            }, 1000);
        }
        
    }
    const result = computeMilk(0); 
    if(typeof (result) === "object" && result.milkCount) { // 同步执行完毕

    } else { // 异步执行完毕
        result.subscribe(result => {
        });
    }
    // 方案二 循环完成所有的数据遍历计算,结束后执行回调函数
    function search(cb){
        let milkCount = 0;
        let j = 0;
        for (var i = 0; i< info.length; i++) {
            if ( i<2 ) {
                // 同步
                milkCount = milkCount + 1;
                j = j + 1;
                if (j === info.length ){ // 所有的都循环完毕
                    cb(milkCount)
                }
            } else {
                // 异步
                setTimeout(() => {
                    milkCount = milkCount + i;
                    j = j + 1;
                    if (j === info.length ){ // 所有的都循环完毕
                        // return milkCount;
                        cb(milkCount)
                    }
                }, 1000);
            }
        }
        return 0;
    }
    function callback(e) {
        console.log(e)
    }
  • 相关阅读:
    Google Analytics:为链接点击设定事件追踪的方法
    HTTP状态码大全
    jquery插件的编写
    2016.2.27日(开学)学习总结
    关于单文件上传的封装
    单文件的文件上传详细解释
    php中对象的串行化
    PDO的事物处理机制
    MySQL操作类的封装(PHP)
    smarty的简单介绍
  • 原文地址:https://www.cnblogs.com/xiaolongzi/p/12358175.html
Copyright © 2020-2023  润新知