2017-12-12 21 views
0

として戻り値Iは、次の機能があります:私はonNgInitに次のようにしようとするとアンギュラ - 未定義

redirect() { 
    this.afs.collection('links').doc(this.path).ref.get().then(function(doc) { 
     if(doc.exists) { 
     // define data and clicks 
     var data = doc.data(); 
     var clicks = doc.data().clicks; 
     // Update clicks 
     doc.ref.update({ 
      'clicks': (clicks + 1) 
     }) 
     .then(function() { 
      if(data.landing == false) { 
      // Redirect to url 
      return false; 
      } else { 
      // Stay for Landing Page 
      return true; 
      } 
     }); 
     } else { 
     this.router.navigate(['/404']); 
     } 
    }).catch(function(error) { 
     console.log("Error getting document:", error); 
    }); 
    } 

を:

console.log(this.redirect()); 

それはundefinedを返します。 trueまたはfalseを返すために値をtrueまたはfalseに設定できるようにするにはどうすればよいか分かりません。

+2

コールバック –

+0

@RandyStivenValentínあなたは何を意味するのか説明できますか?正直言って、私はまだ学習して、すべてに精通していません。 –

答えて

0

機能redirectは、現在何も返されません。しかし、プロミスと仕事をしているようです。その約束を返すようにリファクタリングを試してみてください:

redirect() { 

    return this.afs.collection('links').doc(this.path).ref.get().then(function(doc) { 
     if(doc.exists) { 
     // define data and clicks 
     var data = doc.data(); 
     var clicks = doc.data().clicks; 
     // Update clicks 
     doc.ref.update({ 
      'clicks': (clicks + 1) 
     }) 
     .then(function() { 
      if(data.landing == false) { 
      // Redirect to url 
      return false; 
      } else { 
      // Stay for Landing Page 
      return true; 
      } 
     }); 
     } else { 
     this.router.navigate(['/404']); 
     } 
    }).catch(function(error) { 
     console.log("Error getting document:", error); 
    }); 
    } 

をだから今約束の解決時にあなたが値をプリントアウトすることができます。

this.redirect().then(value => console.log(value)) 
+0

data.landingがfalseまたはtrueの場合、特にtrueまたはfalseを返そうとしています。あるいは、 'landing:boolean;'のような値をtrueまたはfalseに設定します。 私もあなたが提案したものを試してみましたが、まだ未定義です –