首页 > 解决方案 > 如何获取订阅之外的价值?

问题描述

我的代码

this.service.getName().subscribe((success: any) => {
  if (success) {
    for (let i = 0; i < success[i].length; i++) {
      if (success[i].data.empid== data) {
        this.dataList.push(success[i].name);
      }
    }
  }
});

无法访问this.dataList外部subscribe

标签: angulartypescriptsubscribe

解决方案


您尝试this.dataList在致电后立即阅读,this.service.getName()但您遇到了订购问题。考虑以下代码:

this.service.getName().subscribe(() => console.log('A'));
console.log('B')

这将显示B A,因为调用this.service.getName()是异步的。

会发生什么:

  • 称呼this.service.getName()
  • 称呼console.log('B')
  • 浏览器获取响应this.service.getName()并执行() => console.log('A')

因此this.dataList,当它仍然是空的或undefined. 您应该在回调中读取它的值:

this.service.getName().subscribe((success: any) => {
  if (success) {
    for (let i = 0; i < success[i].length; i++) {
      if (success[i].data.empid== data) {
        this.dataList.push(success[i].name);
      }
    }

    // Here, you can safely read this.dataList
    [...]
  }
});

推荐阅读