Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Функция box.once

box.once(key, function[, ...])

Выполнение функции при условии, что она раньше не выполнялась. Передаваемое значение проверяется на предмет того, выполнялась ли функция. Если она выполнялась, ничего не происходит. В противном случае вызывается функция.

Пример использования box.once() см. в vshard-quick-start-storage-code.

{note:warning} Если при инициализации базы данных возникает ошибка внутри box.once(), можно повторно выполнить неудачный блок box.once() без остановки базы данных. Для этого удалите объект once из системного спейса _schema. Выполните box.space._schema:select{}, найдите объект once и удалите его. {/note}

Когда box.once() используется для инициализации, следует подождать, пока база данных не будет в нужном состоянии (только для чтения или для чтения и записи). Для этого см. функции во Вложенный модуль box.ctl.

  • key (string): значение, которое будет проверяться
  • function (function): функция
  • ...: аргументы, которые необходимо передать функции

Пример

В примере показано, как повторно выполнить блок box.once(), содержащий ключ hello.

Сначала проверьте системный спейс _schema.

В примере спейс _schema содержит два объекта box.onceoncebye и oncehello:

app:instance001> box.space._schema:select{}---- - ['oncebye']  - ['oncehello']  - ['replicaset_name', 'replicaset001']  - ['replicaset_uuid', '72d2d9bf-5d9f-48c4-ba80-9d657e128fee']  - ['version', 3, 1, 0]

Удалить oncehello объект:

app:instance001> box.space._schema:delete('oncehello')---- ['oncehello']...

После этого проверьте спейс _schema опять:

app:instance001> box.space._schema:select{}---- - ['oncebye']  - ['replicaset_name', 'replicaset001']  - ['replicaset_uuid', '72d2d9bf-5d9f-48c4-ba80-9d657e128fee']  - ['version', 3, 1, 0]...

Чтобы повторно выполнить функцию, вызовите метод box.once() ещё раз:

app:instance001> box.once('hello', function() end)---...app:instance001> box.space._schema:select{}---- - ['oncebye']  - ['oncehello']  - ['replicaset_name', 'replicaset001']  - ['replicaset_uuid', '72d2d9bf-5d9f-48c4-ba80-9d657e128fee']  - ['version', 3, 1, 0]...