如何像async wait一样实现同步订阅。角形,火力

问题描述 投票:0回答:1

问题是控制台代表“未定义”。

this.firestore.collection('list').doc('1').get().subscribe((doc: any) => {
   this.myAns = doc.data().answer ? doc.data().answer : "no answer";
});

console.log('this.myAns', this.myAns);

但是,我想在控制台中得到正确的答案。

this.firestore.collection('list').doc('1').get().subscribe(async (doc: any) => {
   this.myAns = await doc.data().answer ? doc.data().answer : "no answer";
});

console.log('this.myAns', this.myAns);

我试过这个。但不工作。

this.firestore.collection('list').doc('1').get().subscribe((doc: any) => {
   this.myAns = doc.data().answer ? doc.data().answer : "no answer";
   console.log('this.myAns', this.myAns);
});

我知道这很好用,但我想要的是代表 this.firestore 之外。 请帮助我..

angular firebase subscribe
1个回答
0
投票

您应该将 this.myAns 放在订阅块内。如果您需要在订阅块之外使用 this.myAns,您可以从订阅块内触发必要的逻辑或使用回调函数。


fetchAnswer() {
  this.firestore.collection('list').doc('1').get().subscribe((doc: any) => {
    this.myAns = doc.exists ? doc.data().answer : "no answer";
    console.log('this.myAns inside subscribe', this.myAns);
    this.handleAnswer(this.myAns);
  });
}

handleAnswer(answer: any) {
  console.log('this.myAns outside subscribe', answer);
}
© www.soinside.com 2019 - 2024. All rights reserved.