javascript - Angular 2 和原生 Promise

标签 javascript angular typescript

我在使用带有第二个 Angular 和 typescript 的 native promise 时遇到问题:

export class LoginComponent implements OnInit {

    public user = {};

    constructor( private authService:AuthenticationService) { }

    ngOnInit() {
    }

    login() {

        console.log( 'Connecting to server' );

        this.authService.login( this.user ).then(( response ) => {

            // works
            console.log( response['success'] );

            // error
            console.log( response.success ); 

        }, ( error ) => {

            console.log( error );
        });
    }
}

下面是简单的服务,与服务器的假连接:

export class AuthenticationService {

    // ... some code ...

    login( loginData ) {

        let self = this;

        return new Promise(function(resolve, reject){

            // fake delay - for now is no back end
            setTimeout(function() {

                if ( loginData.username === 'username' && loginData.password === 'password' ) {

                    resolve({
                        message: "Successfully logged in",
                        success: true,
                        errors: null
                    });
                } else {

                    reject({
                        message: "Wrong user data reperesented",
                        success: false,
                        errors: {
                            "username": true,
                            "password": true
                        }
                    });
                }
            }, 100);
        });
    }

    // ... some code ...
}

尝试搜索我必须采取的措施来解决类型“{}”上不存在属性“成功”。错误,但没有成功。

最佳答案

发生这种情况是因为上面的代码没有输入。

为了使这项工作正常进行,它应该是

login( loginData ): Promise<any> { ... }

this.authService.login( this.user ).then(( response: any ) => { ... })

更好的方法是让类型为您工作,而不是忽略它们:

interface IAuthLoginResponse {
    message: string;
    success: boolean;
    errors: any;
}

...

login( loginData ): Promise<IAuthLoginResponse> {
  return new Promise<IAuthLoginResponse>(function (resolve, reject) { ... })
}

关于javascript - Angular 2 和原生 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41508709/

相关文章:

JavaScript 无法在 Chrome 上运行

angular - 设置请求 cookies angular2 http post 请求

javascript - 在 Sequelize Model 类中键入属性

javascript - 在 jQuery 中使用单选按钮切换类

javascript - Protractor 可重复使用的值

javascript - HTML 中的嵌套引用

angular - 类型 ClassB 中的属性 x 不可分配给基类型 ClassA 中的相同属性

angular - 使用 .forEach 的自定义验证器 - 可以以不同的方式完成(更好)吗?

Typescript mixin 限制为 typeof 类

javascript - 如何判断 Angular 8 应用程序中的 &lt;textarea&gt; 是否为空?