Scope JavaScript

问题描述 投票:0回答:1

我是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
  };
}

commandManager.execute(new LogInCommand("[email protected]", "123456"));
setTimeout(function() {
  console.log(commandManager.user);
}, 10000);

这里是结果:

{age: 21, connection: null, email: "[email protected]", name: "andy", pendingConnection: null, …}
null

感谢大家的帮助!

javascript scope javascript-objects
1个回答
1
投票

因为您直接更改了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);
    },
    user: initialData.user
  };
}

commandManager.execute(new LogInCommand("[email protected]", "123456"));
setTimeout(function() {
  console.log(commandManager.user);
}, 10000);
© www.soinside.com 2019 - 2024. All rights reserved.