首页 > 解决方案 > 访问和更新对象

问题描述

我在访问对象时遇到问题,我尝试定义 alet并向其写入一个新对象,但是当我尝试访问它时,这是不可能的,这就是我的尝试的样子:

function Player(uniqueId, name, figureString, motto, memberSince) {
    this.uniqueId = uniqueId;
    this.name = name;
    this.figureString = figureString;
    this.motto = motto;
    this.memberSince = memberSince;
}

...

let player;
getUser
    .then((res) => {
        player = new Player(res.uniqueId, res.name, res.figureString, res.motto, res.memberSince);
    })
    .catch(() => {
            ...
    });

        // Trying to access player here
console.log(player.name + player.figureString);

标签: javascriptobject

解决方案


就像其他人说的那样,问题在于console.log(...)异步代码。console.log()因此调用时未定义播放器。为避免这种情况,您可以使用async/await.

function Player(id, name) {
  this.name = name;
  this.id = id;
}

const getUser = () => {
  return new Promise((resolve, reject) => {
    return resolve({ name: "Karl", id: 1 });
  });
}

(async () => {
  try {
    const { name, id } = await getUser();
    const player = new Player(id, name);
    console.log(`id: ${player.id}, name: ${player.name}`);
  } catch (err) {
    //handle error
  }
})();

并不是说我添加了 getUser 存根和简化示例以仅使用nameid. 最后你可以看到 IIFE,因为要使用await关键字,它必须放在async函数内部。这样您就可以确定播放器已定义。


推荐阅读