美文网首页
java代码中执行js

java代码中执行js

作者: 风一样的存在 | 来源:发表于2019-01-17 18:18 被阅读0次

有时候对于经常改变的逻辑,容易增加频繁发布的成本。所以有了现在的文件配置中心,携程开发的apollo和google开源的consul都解决了这个问题。本文的重点介绍Java执行js,js放在配置中心上。

    /**
     * 使用js引擎执行js
     * @param callTime
     * @param timestamp
     * @return
     */
    private String formatCallTime(String callTime,String timestamp){
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("javascript");
        String script = whatsAppConfigHandler.getConfigInfo(whatsappServiceProperties.getDateParseScript());
        try{
            engine.eval(script);
            Invocable invocable = (Invocable) engine;
            String newCallTime = (String)invocable.invokeFunction("getCallTime", callTime, timestamp);
            return newCallTime;
        }catch (Exception e){
            log.error("通话时间格式化失败!");
        }
        return callTime;
    }

可以并不是像希望的那样完美的运行,遇到一个问题看了很多国外的网站都找不到类似的话题:


运行报错.png

一行一行的代码定位,最后发现是我在js里面使用了箭头函数(js中的lambda表达式):

if (new RegExp(i18n.indonesian[0]).test(callTime)) {
    var regex = /\s|\.|:/;
    // 这里是用了箭头函数过滤数组
    var data = callTime.split(regex).filter(item=>item);
    if (data[1] in MonthConstant.Indonesian) {
        var date = new Date(parseInt(timestamp));
        var year = date.getFullYear();
        var month = MonthConstant.Indonesian[data[1]];
        var day = data[0];
        var hour = data[2];
        var minute = data[3];
        return year + '-' + addZero(month) + '-' + addZero(day) + ' ' + hour + ':' + minute;
    }
}

修改为常规的写法解决了问题:

if (new RegExp(i18n.indonesian[0]).test(callTime)) {
    var regex = /\s|\.|:/;
    var data = callTime.split(regex).filter(function(item) {
        return !(!item || item === "");
    });
    if (data[1] in MonthConstant.Indonesian) {
        var date = new Date(parseInt(timestamp));
        var year = date.getFullYear();
        var month = MonthConstant.Indonesian[data[1]];
        var day = data[0];
        var hour = data[2];
        var minute = data[3];
        return year + '-' + addZero(month) + '-' + addZero(day) + ' ' + hour + ':' + minute;
    }
    return callTime;
}

相关文章

网友评论

      本文标题:java代码中执行js

      本文链接:https://www.haomeiwen.com/subject/atfwdqtx.html