我不太熟悉Angular 观测.我有一个问题,我想在subscribe方法中返回一个值.我有

getTotalQuestions(idForm:string){
let totalQuestions:number;
this.getFirebaseData(idForm+"/Metadatos")
.subscribe(items => 
  {
    items.map(item => {
      totalQuestions=item.Total;
      console.log(totalQuestions);
    });
  }
);
console.log(totalQuestions);
return totalQuestions;
}

console.log(totalQuestions)张打印4张,后console.log(totalQuestions)张打印undefined张.

getTotalQuestions(idForm:string){
let totalQuestions:number;
this.getFirebaseData(idForm+"/Metadatos")
.subscribe(items => 
  {
    items.map(item => {
      totalQuestions=item.Total;
      console.log(totalQuestions);
    });
  }
);
console.log(totalQuestions);
return totalQuestions;
}

第一个console.log(totalQuestions)不打印任何内容,第二个console.log(totalQuestions)打印未定义的内容.我不明白为什么会这样.

我希望你能帮我澄清我不理解的概念.谢谢

推荐答案

你不能像那样直接返回totalQuestions,你需要使用一个主题来实现这一点.

getTotalQuestions(idForm:string): Observable<string> {
let totalQuestions:number;
var subject = new Subject<string>();
this.getFirebaseData(idForm+"/Metadatos")
.subscribe(items => {
    items.map(item => {

      totalQuestions=item.Total;
      console.log(totalQuestions);
      subject.next(totalQuestions);
    });
  }
);
  return subject.asObservable();
}

用法:getTotalQuestion(idForm).subscribe((r)=>console.log(r))

Typescript相关问答推荐

创建一个将任意命名类型映射到其他类型的TypScript通用类型

如何将http上下文附加到angular中翻译模块发送的请求

具有映射返回类型的通用设置实用程序

根据另一个成员推断类成员的类型

如何推断类方法未知返回类型并在属性中使用它

迁移到Reaction路由V6时,获取模块Reaction-Router-Dom';没有导出的成员RouteComponentProps错误

获取函数中具有动态泛型的函数的参数

角效用函数的类型推断

被推断为原始类型的交集的扩充类型的交集

错误TS2403:后续变量声明必须具有相同的类型.变量';CRYPTO';的类型必须是';CRYPATO';,但这里的类型是';CRYPATO';

在列表的指令中使用intersectionObservable隐藏按钮

布局组件中的Angular 17命名路由出口

刷新页面时,TypeScrip Redux丢失状态

vue-tsc失败,错误引用项目可能无法禁用vue项目上的emit

对象类型的TypeScrip隐式索引签名

为什么Typescript只在调用方提供显式泛型类型参数时推断此函数的返回类型?

与toast.error一起react 中的Async TUNK错误消息

如何将spread operator与typescripts实用程序类型`参数`一起使用

如何使用angular15取消选中位于其他组件中的复选框

为什么TS条件返回要求不明确的强制转换而不是精确的强制转换?