Очень похоже на то, что делал @Duncan выше, но мне не нравится запутывать глобальное пространство функций объекта с помощью Enum, поэтому я написал следующее:
function mkenum_1()
{
var o = new Object();
var c = -1;
var f = function(e, v) { Object.defineProperty(o, e, { value:v, writable:false, enumerable:true, configurable:true })};
for (i in arguments) {
var e = arguments[i];
if ((!!e) & (e.constructor == Object))
for (j in e)
f(j, (c=e[j]));
else
f(e, ++c);
}
return Object.freeze ? Object.freeze(o) : o;
}
var Sizes = mkenum_1('SMALL','MEDIUM',{LARGE: 100},'XLARGE');
console.log("MED := " + Sizes.MEDIUM);
console.log("LRG := " + Sizes.LARGE);
// Output is:
// MED := 1
// LRG := 100
@Stijin также имеет аккуратное решение (ссылаясь на в его блог), который включает в себя свойства этих объектов. Я тоже написал для этого код, который я включаю в следующий.
function mkenum_2(seed)
{
var p = {};
console.log("Seed := " + seed);
for (k in seed) {
var v = seed[k];
if (v instanceof Array)
p[(seed[k]=v[0])] = { value: v[0], name: v[1], code: v[2] };
else
p[v] = { value: v, name: k.toLowerCase(), code: k.substring(0,1) };
}
seed.properties = p;
return Object.freeze ? Object.freeze(seed) : seed;
}
Эта версия создает дополнительный список свойств, позволяющий удобное преобразование имен и короткие коды. Мне нравится эта версия, потому что не нужно дублировать ввод данных в свойствах, поскольку код делает это за вас.
var SizeEnum2 = mkenum_2({ SMALL: 1, MEDIUM: 2, LARGE: 3});
var SizeEnum3 = mkenum_2({ SMALL: [1, "small", "S"], MEDIUM: [2, "medium", "M"], LARGE: [3, "large", "L"] });
Эти два могут быть объединены в один блок обработки, mkenum, (использовать перечисления, присваивать значения, создавать и добавлять список свойств). Однако, поскольку я уже потратил слишком много времени на это сегодня, я оставлю комбинацию в качестве упражнения для дорогого читателя.
Я бы использовал cron для запуска сценария каждую минуту и заставил бы этот сценарий запускать ваш сценарий четыре раза с 15-секундным засыпанием между запусками.
(Предполагается, что ваш сценарий запускается быстро - вы можете настроить время сна, если нет.)
Таким образом, вы получите все преимущества cron
, а также 15-секундный период запуска.
Изменить: См. также комментарий @ bmb ниже.
) Таким образом, вы получите все преимущества cron
, а также 15-секундный период запуска.
Изменить: См. Также комментарий @ bmb ниже.
) Таким образом, вы получите все преимущества cron
, а также 15-секундный период запуска.
Изменить: См. Также комментарий @ bmb ниже.
Если вы настаиваете на запуске сценария из cron:
* * * * * /foo/bar/your_script
* * * * * sleep 15; /foo/bar/your_script
* * * * * sleep 30; /foo/bar/your_script
* * * * * sleep 45; /foo/bar/your_script
и замените имя и путь сценария на / foo / bar / your_script
Разве это не работает в фоновом режиме?
#!/bin/sh
while [ 1 ]; do
echo "Hell yeah!" &
sleep 15
done
Это примерно настолько эффективно, насколько это возможно. Важная часть выполняется только каждые 15 секунд, а в остальное время скрипт спит (таким образом не тратя циклы).