Angular 2服务函数将Undefined返回到组件

时间:2017-09-08 06:12:04

标签: angular

我在阅读时将数组从Component返回到Service。但我在组件中未定义而不是组件中的数组结果。

服务:

 getItems(): Promise<any>{
        var items = [{id:1}{id:2}{id:3}];
        return Promise.resolve(items);
    }

组件A:

 ngOnInit(): void {
          this.service.getItems()
              .then(result => this.items= result);
          console.log(this.items);
      }
  );

}

3 个答案:

答案 0 :(得分:0)

您的then正在语句console.log(this.items);之后工作,因为它是异步的。因此,在分配之前,请打印items以及未定义的原因。将console.log放入传递给then的函数中。

ngOnInit(): void {
     this.service.getItems()
           .then(result => { 
               this.items= result;
               console.log(this.items);
           });
}

参见示例

查看console.log s的序列。

let items = [];

function getItems() {
   const arr = [{id:1},{id:2},{id:3}];
   return Promise.resolve(arr);
}
    
getItems().then(result => {
   items = result;
   console.log(`Second - ${items}`);
});

console.log(`First - ${items}`);

答案 1 :(得分:0)

in service.ts

getItems(): Promise<any> {
        var items = [{ id: 1 }, { id: 2 }, { id: 3 }];
        return Promise.resolve(items);
    }

在component.ts

private items: Array<any> = [];
ngOnInit(): void {
        this.service.getItems()
            .then(result => {
                this.items = result
                console.log('this.items', this.items);
            }

)         }

答案 2 :(得分:0)

 ngOnInit(): void {
          this.service.getItems()
              .then(result => this.items= result);
          console.log(this.items);
      }
  );
  

该服务是异步调用,并且需要一些时间来解析承诺   立即控制台日志记录,您将其记录在同步上下文中   那时候this.items是未定义的。

将控制台.log移动到其中然后它将正常工作,如

    .then(result => {
        this.items = result
        console.log(this.items);
    }