js中第三方库lodash和async及moment的使用

import * as _ from 'lodash'
import * as _async from 'async'
import * as _moment from 'moment'
import * as _md5 from 'md5'

var log = console.log

const {ccclass, property} = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {


    onLoad() {

        log(_.random(1, 5))
        log(_moment().format('MMMM Do YYYY, h:mm:ss a'))
        log(_md5('admin'))


        log(_moment("20111031", "YYYYMMDD").fromNow()); // 7 年前
        log(_moment("20120620", "YYYYMMDD").fromNow()); // 7 年前
        log(_moment().startOf('day').fromNow());        // 18 小时前
        log(_moment().endOf('day').fromNow());          // 6 小时内
        log(_moment().startOf('hour').fromNow());       // 1 小时前

        // N次循环
        _.times(5,function(a){
            console.log(a);
        });

        // 深层查找属性值
        let ownerArr = [{
            "owner": "Colin",
            "pets": [{"name": "dog1"}, {"name": "dog2"}]
        }, {
            "owner": "John",
            "pets": [{"name": "dog3"}, {"name": "dog4"}]
        }];
        let lodashMap = _.map(ownerArr, 'pets[0].name');
        console.log('------- lodashMap -------');
        console.log(lodashMap);

        // 深克隆对象
        let objA = {
            "name": "戈德斯文"
        };
        let objB = _.cloneDeep(objA);
        console.log(objA);
        console.log(objB);
        console.log(objA === objB);

        // 从列表中随机的选择列表项
        let smartTeam = ["戈德斯文", "杨海月", "柴硕", "师贝贝"];
        console.log(_.sample(smartTeam));
        console.log(_.sampleSize(smartTeam,2));

        // 判断对象中是否含有某元素
        let smartPerson = {
                'name': '戈德斯文',
                'gender': 'male'
            }
        console.log(_.includes(smartPerson, '戈德斯文'));
        console.log(_.includes(smartTeam, '杨海月'));
        console.log(_.includes(smartTeam, '杨海月',2));

        // 遍历循环
        _.forEach([1, 3] , function(value, key) {
            console.log(key,value);
        });

        // this.shunXuAsync()
        // this.bingXingAsync()
        // this.puBuAsync()

    }

    shunXuAsync(){
        // 异步 顺序执行
        let task1 = function (callback) {

            console.log("task1");
            callback(null, "task1")
        }

        let task2 = function (callback) {

            console.log("task2");
            callback(null, "task2")
            // callback("err","task2") // null改为err ,如果中途发生错误,则将错误传递到回调函数,并停止执行后面的函数
        }

        let task3 = function (callback) {

            console.log("task3");
            callback(null, "task3")
        }

        _async.series([task1, task2, task3], function (err, result) {
                console.log("series");
                if (err) {
                    console.log(err);
                }
                console.log(result);
            }
        )
    }

    bingXingAsync(){
        // 异步 并行执行
        let task1 =function(callback){

            console.log("task1");
            setTimeout(function(){
                callback(null,"task1")
            },5000);

        }

        let task2 =function(callback){

            console.log("task2");

            setTimeout(function(){
                callback(null,"task2")
            },1000);
        }

        let task3 =function(callback){

            console.log("task3");
            setTimeout(function(){
                callback(null,"task3")
            },3000);
        }
        console.time("parallel方法");
        _async.parallel([task1,task2,task3],function(err,result){

            console.log("parallel");

            if (err) {
                console.log(err);
            }

            console.log(result);
            console.timeEnd("parallel方法");
        })

    }

    puBuAsync(){
        // 瀑布流, 依次执行,前一个函数的输出为后一个函数的输入
        let task1 =function(callback){

            console.log("task1");
            callback(null,"11")

        }

        let task2 =function(q,callback){

            console.log("task2");
            console.log("task1函数传入的值: "+q);
            callback(null,"22")
        }

        let task3 =function(q,callback){

            console.log("task3");
            console.log("task2函数传入的值: "+q);
            callback(null,"33")
        }
        console.time("waterfall方法");
        _async.waterfall([task1,task2,task3],function(err,result){

            console.log("waterfall");

            if (err) {
                console.log(err);
            }

            console.log("result : "+result);
            console.timeEnd("waterfall方法");
        })
    }

    limitBingFaAsync(){
        // 和parallel类似,只是limit参数限制了同时并发执行的个数,不再是无限并发
        let task1 =function(callback){

            console.log("task1");
            setTimeout(function(){
                callback(null,"task1")
            },5000);

        }

        let task2 =function(callback){

            console.log("task2");

            setTimeout(function(){
                callback(null,"task2")
            },3000);
        }

        let task3 =function(callback){

            console.log("task3");
            setTimeout(function(){
                callback(null,"task3")
            },4000);
        }
        console.time("parallelLimit方法");
        _async.parallelLimit([task1,task2,task3], 2, function(err,result){

            console.log("parallelLimit");

            if (err) {
                console.log(err);
            }

            console.log(result);
            console.timeEnd("parallelLimit方法");
        })

    }

    // update (dt) {}
}

发布了69 篇原创文章 · 获赞 10 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/mhtqq809201/article/details/85781554
今日推荐