我有一个下面的函数,我在函数外部设置了用户名,但我可以在其中获取值但不在外面。这是为什么?示例如下所示。我试图在外面打印或调用它,以便它返回该值
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
如何在调用时获取原始用户名?
答案 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
- 方法中调用一个方法,该方法将用户名作为一个句子并且正在做某事用它。