Promiseパターンで返ってくる値を、dataオブジェクトのfoo
にセットします。
export default {
name: 'foo',
data() {
return {
foo: ''
}
}
...
Promise-pattern(Before)
getData: function() {
this.$firestore.collection('posts').where('categories.cat', '==', true)
.get()
.then(function(querySnapshot) {
let data = []
querySnapshot.forEach(function(doc) {
data.push(doc.data())
})
this.foo = data
})
Uncaught (in promise) TypeError: Cannot set property 'foo' of undefined
「undefined
のfoo
には何もセットできんぞ!!」と怒られてしまいます。
解決策: this
へのreference用変数(self)をつくる
Promise-pattern(After)
getData: function() {
let self = this
this.$firestore.collection('posts').where('categories.cat', '==', true)
.get()
.then(function(querySnapshot) {
let data = []
querySnapshot.forEach(function(doc) {
data.push(doc.data())
})
self.foo = data
})
無事、dataオブジェクトのfoo
に対して返り値をセットすることができました。
this
や変数のscope範囲を理解していないとハマります...。
参考リンク
- javascript, promises, how to access variable this inside a then scope
https://stackoverflow.com/questions/32547735/javascript-promises-how-to-access-variable-this-inside-a-then-scope