即使我在函数之外初始化变量,也不会打印该值

时间:2017-07-31 22:58:06

标签: javascript

我有一个下面的函数,我在函数外部设置了用户名,但我可以在其中获取值但不在外面。这是为什么?示例如下所示。我试图在外面打印或调用它,以便它返回该值

var username
Auth.loggedInUser().then(function (user){
   username = user.username
   console.log(username) <--- this will print the username   
});
console.log(username) <--- this will print undefined

此外,如果我尝试以下操作,它会在控制台中返回一个不仅仅是用户名

的承诺
var username = Auth.loggedInUser().then(function (user){
   return user.username
});
console.log(username) <--- this will Promise {$$state: Object}$$state: Object__proto__: Object

如何在调用时获取原始用户名?

2 个答案:

答案 0 :(得分:1)

这只是因为您正在使用异步的Promise。在调用console.log(username)时,它尚未完成(将user.username设置为用户名)。您可以查看example

var username = 'Rose';
new Promise(resolve => {
  resolve('Jack');
})
.then(name => {
  username = name;
  console.log('A:' + username);
})
.then(() => {
  console.log('B:' + username);
})
console.log('C:' + username);

// result:
// C:Rose
// A:Jack
// B:Jack

更新:我更新了等待/同步解决方案,请check

(async () => {
  const result = await axios.get('/echo/html/'); // axios.get returns a Promise object
  const status = result.status; // you wait until result is fulfilled
  console.log(status); // in this way, your get what you want.
})(); 

答案 1 :(得分:0)

这很难用,因为你正在使用异步运行的Promise。这意味着目前Javascript正在使用console.log(username)运行第二行,Promise尚未解析并打印undefined

如果你想使用username的值,你必须等到Promise结算,例如在then - 方法中调用一个方法,该方法将用户名作为一个句子并且正在做某事用它。