简单的平移和独特的不适用于JavaScript

时间:2019-07-10 21:56:35

标签: javascript node.js redis

非常简单的代码,却让我的大脑炸了几个小时?因此,如您在add函数上所见,它基本上需要2个参数; IP地址和UNIX日期

const redis = require("redis"), client = redis.createClient();
const {promisify} = require('util');
const getAsync = promisify(client.get).bind(client);
const setAsync = promisify(client.set).bind(client);

_ = require('lodash');
_weg = require('wegweg')({
    globals: false
});

module.exports = {

    add: async function (ip, cday) {
        var key = _weg.md5('dact:' + ip);
        return await getAsync(key).then((result) => {
            let value;
            if (result == null) {
                value = [];
            } else {
                value = result;
            }
            value = value.unshift(cday);
            value = _.uniq(value);
            return setAsync(key, value);
        });
    }

};

所以,如果我要继续通过这两项:

await ping_history.add("127.0.0.1", 1562774400);

似乎没有插入数组之类的东西? key应该是 MD5 ,而value应该只是一组唯一的日期。

1 个答案:

答案 0 :(得分:2)

unshift方法会在适当的位置修改数组,但不会返回新的数组。 unshift的返回值是数组的新长度。所以之后

value = value.unshift(cday);

value变量现在包含一个数字,而不是数组。

value = [1, 2, 3, 4];
value = value.unshift(10);
console.log(value);

只要写

value.unshift(cday);

无需重新分配变量。