我怎样才能将Promise变成类似列表的东西?

时间:2016-09-20 09:49:11

标签: json angular login promise angular2-services

我是处理Angle 2的新手我已经开发了一个服务REST API,它返回一个JSON字符串。这使得请求是以下代码:

.h-ruler-first-line, .h-ruler-second-line {
    width: calc(50% - 15px);
    margin: 12px 0;
    height: 1px;
    background-color: #373737;
    display: inline-block;
    vertical-align: middle;
}

以下代码是一个简单的登录,没有更多,但不是因为authenticatedUserList原因是NULL并且它的属性是obiamen。

getUsuaris(): Promise<Usuari> {
    return this.http.get(this.URLUsuaris)
        .toPromise()
        .then(response => response.json().data as Usuari[])
        .catch(this.handleError);
}

使用REST API的服务器正确返回信息!

发送API的用户类:

private URLUsuaris = 'http://localhost:50541/api/Usuaris';

constructor(
    private _logger: Logger,
    private _router: Router,
    private http: Http) { }

logIn(usuari: Usuari) {

    var authenticatedUserList: Promise<Usuari> = this.getUsuaris();
    var authenticatedUser: Usuari;

    this._logger.log(authenticatedUserList[0]);

    for (var i in authenticatedUserList) {
        if (authenticatedUserList[i].usuari === usuari.Usuari1) {
            authenticatedUser = authenticatedUserList[i];
            break;
        }
    }

    if (authenticatedUser && authenticatedUser.Password === usuari.Password){
        localStorage.setItem("usuari", authenticatedUser.Usuari1);
        this._router.navigate(['Home']);

        this._logger.log(localStorage.getItem("usuari"));
        this._logger.log('Usuari Registart!');

        return true;
    }
    this._logger.log('Usuari No Registart!');
    return false;
}

如果您知道可能会失败的解释,请不要在将来遇到同样的错误。

非常感谢!!

1 个答案:

答案 0 :(得分:0)

你需要像这样使用承诺的回报:

private URLUsuaris = 'http://localhost:50541/api/Usuaris';

constructor(
    private _logger: Logger,
    private _router: Router,
    private http: Http) { }

logIn(usuari: Usuari) {
	return this.getUsuaris().then((authenticatedUserList)=>{
		var authenticatedUser: Usuari;

		this._logger.log(authenticatedUserList[0]);

		for (var i in authenticatedUserList) {
			if (authenticatedUserList[i].usuari === usuari.Usuari1) {
				authenticatedUser = authenticatedUserList[i];
				break;
			}
		}

		if (authenticatedUser && authenticatedUser.Password === usuari.Password){
			localStorage.setItem("usuari", authenticatedUser.Usuari1);
			this._router.navigate(['Home']);

			this._logger.log(localStorage.getItem("usuari"));
			this._logger.log('Usuari Registart!');

			return true;
		}
		this._logger.log('Usuari No Registart!');
		return false;
	});
}

这也改变了logIn方法的返回,现在它返回Promise<boolean>而不是boolean