2016-03-18 2 views
-1

Я размещаю веб-сервер в node.js, , в частности я разрабатываю модуль для управления заказами.Значение переменной javascript в асинхронной функции, вызываемой одновременно несколькими клиентами

модуль обернут внутри анонимной функции

(function(){})(); 

, если функция «insertOrder» Я объявляю переменный порядок, как это:

var order = { 
     user_id: '', 
     address_id: '', 
     payed: false, 
     accepted: false, 
     shipped: false 
    }; 

Затем он получает заполняются значения «возвращаются» от асинхронных функций, которые я вызываю, которые взаимодействуют с базой данных.

Это приложение будет использоваться одновременно несколькими клиентами.

Теперь, предполагая, что два пользователя хотят сделать заказ, является ли переменная, подлежащая повторной инициализации начальному объекту при каждом вызове функции get, перезаписывая изменения, сделанные во время первого выполнения? Или контекст будет генерироваться каждый раз, когда клиент делает вызов на сервер? Я знаю, что это не относится к node.js, но все еще не может определить этот .

I.E. - переменная значение предыдущей итерации будет храниться как-то и использоваться до конца первого вызова функции или потеряна, как только функция будет вызвана снова?

спасибо.

EDIT: дальнейшее объяснение проблемы.

Пользователь user_id будет использоваться для получения адреса, на который будет отправлен заказ. Неправильно user_id собирается привести пункт отгруженного к неправильному адресу

ответ

1

Если var order = { ... } находится внутри функции insertOrder, то каждый раз, когда функция insertOrder называются order будет инициализируются. Область выделена, поэтому не должно быть смешения локальных переменных даже в асинхронной ситуации.

jsFiddle

+0

да, но мой вопрос: является переменным значение предыдущей итерации собирается храниться как-то и не используются до конца первой функции или потерянных, как только функция вызывается снова? – xechelonx

+0

проблема с вашей js.fiddle: функция разрешается, как только она вызывается, так как она не ждет какого-либо асинхронного ответа, плюс insertOrder() не получает вызов simoultaneously, но вместо этого вызывается после завершения первого вызова, поэтому это последующий вызов – xechelonx

+1

Области функции инкапсулированы, поэтому не должно быть смешения переменных. Я добавил тайм-ауты к скрипке, но я не уверен, правильно ли это это демонстрирует. Вы не можете запускать тесты в своей среде? – Shaun

Смежные вопросы