在异步对象上使用方法?

时间:2017-09-26 12:12:07

标签: javascript angular typescript asynchronous

我的Javascript存在很大问题(我正在使用TypeScript语言开发一个使用Angular 4的Web应用程序。后端端是使用AWS开发的)。 我不太清楚如何使用异步调用机制。

不幸的是,如果我使用promises,我就不能在代码中使用任何对象。

我希望在我的方法中操纵它们。但我唯一能做的就是将这些数据用于html模板中的静态显示,并且不要在代码中操作它们。 这是我的代码示例:

// In ClassA
  getCognitoUsers() {

  var params = {
    UserPoolId: environment.userPoolId
  };

  return this.cognitoIdentityServiceProvider.listUsers(params).promise();

}

 // In ClassB
        let container = this;
        this.ClassB.getCognitoUsers().then(
        function(data) {
           container.myProperty = data;
        }
    );

对象this.myProperty它也可以由应用程序中的其他类引用。问题是我可以在html模板中执行我想要的操作,但不能在业务代码中执行,例如:

// In the HTML template
{{myProperty.mySubProperty}} <!-- displays correctly! -->
// In the .ts file
myMethod() {
 let subProperty = this.myProperty.mySubProperty; // ERROR: will always be undefined because not in asynchronous flow
}

我知道这个问题是因为我调用了一个异步方法,但是我希望通过这些承诺我可以解决这个问题。 有人可以告诉我这段代码有什么问题,我怎样才能让对象在业务代码中操作(而不仅仅是静态地在模板中)? 我希望在异步调用之后执行应用程序的一些重要操作!

0 个答案:

没有答案