Область применения JavaScript - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в JavaScript. В приведенном ниже коде при входе в систему я пытаюсь получить информацию о пользователе из базы данных и сохранить ее в объекте user. Однако, когда я проверяю пользователя в области действия commandManager, получается null. Как я могу сделать user не null?

Вот код:

function LogInCommand(username, password) {
  return new Command(function (user) {
    api
      .logIn(username, password)
      .then(function (data) {
        user = data;
        console.log(user);
      })
      .catch(function (error) {
        console.log(error);
      });
  });
}

function createCommandManager() {
  var user = null;

  return {
    execute: function (command, ...args) {
      command.execute(user, ...args);
    },
    user: user
  };
}

var commandManager = createCommandManager();

commandManager.execute(new LogInCommand("andy@gmail.com", "123456"));
setTimeout(function() {
  console.log(commandManager.user);
}, 10000);

Вот результат:

{age: 21, connection: null, email: "andy@gmail.com", name: "andy", pendingConnection: null, …}
null

Спасибо всем вам за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Поскольку вы меняете переменную user напрямую. Это сломает ссылку, и это не будет работать. Если вы хотите сделать это по-своему. Вы можете изменить свой код, как показано ниже.

function LogInCommand(username, password) {
  return new Command(function (initialData) {
    api
      .logIn(username, password)
      .then(function (data) {
        initialData.user = data;
        console.log(initialData.user);
      })
      .catch(function (error) {
        console.log(error);
      });
  });
}

function createCommandManager() {
  var initialData = {
     user: null,
  };

  return {
    execute: function (command, ...args) {
      command.execute(initialData, ...args);
    },
    data: initialData
  };
}

commandManager.execute(new LogInCommand("andy@gmail.com", "123456"));
setTimeout(function() {
  console.log(commandManager.data.user);
}, 10000);
0 голосов
/ 10 апреля 2020

Одной из вещей, которые очевидны в коде, является то, что они не закрыты в правильном ключе, и есть команды, которые отсутствуют.

...