2016-10-20 106 views
1

我有非常简单的代码,但我无法理解它。对Angular2的承诺承诺

我有它返回当前用户名服务

所以我做下面进入登录网页的用户名和显示。请注意当前登录的用户是“演示”

this.userData.getUsername().then(value => { 
this.username = value ; 
console.log("Inside -->" + value); 
}); 
console.log("Outside -- >" + this.username); 

所以现在当我运行此代码。我不this.username

得到的用户名这是执行console.log输出
Outside -- >undefined Inside -->demo
Shoulnd't两种情况下,这显示“演示”。 (内外) 为什么外界未定义?

请帮我理解这一点。

+1

这是因为这个调用是异步的。它开始运行'getUsername()'方法,但在运行时继续运行。所以它首先打到外部日志,其中'this.username'仍然是未定义的,那么方法结束,你会得到Inside log –

+0

它与Angular 2没有任何关系。这就是异步调用的工作原理, ://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests) –

回答

2

这是预期的行为。

这是一个异步调用,后来

this.userData.getUsername().then(value => { 
    this.username = value ; 
    console.log("Inside -->" + value); 
}); 

返回在此期间继续执行此

console.log("Outside -- >" + this.username); 

当异步调用完成最终Promise执行功能

value => { 
    this.username = value ; 
    console.log("Inside -->" + value); 
} 

这是早先通过的。

+0

谢谢。那么我如何在全局变量(this.username)中获取用户名? – viks

+1

这就是你的代码已经在做什么。你似乎困惑的是什么时候会发生什么。 'this.username = value;'稍后执行'console.log(“Outside - >”+ this.username);' –

+1

明白了。我只是感到困惑,并没有编码下一步。我实际上在变量中获得了正确的值。应该只是相信自己。 – viks