异步函数不返回componentWillMount中的firebase对象

时间:2017-11-06 13:20:09

标签: javascript reactjs firebase asynchronous firebase-realtime-database

我正在构建一个react应用程序,它在componentWillMount中从Firebase检索JSON对象。我已经设置了一个异步函数来调用Firebase,但它不会返回对象,而是回调函数本身。我对承诺感到有点困惑,需要澄清......

这是我的getMessages异步函数

import loadDB from './db';

// create a promise that returns snapshot.val
export default async (keyProp) => {
  try {
    const db = await loadDB()
    const key = db.ref('hashtags/' + keyProp)

    const response = await key.on('value', function(snapshot) {
      snapshot.val(); //Firebase Object displays in console.log here
    })

    return response
  }
  catch(err) {
    console.log('fetch failed', err);
    return null
  }
}

这是我的componentWillMount

import getMessages from '../lib/get-messages.js'

componentWillMount() {
        const key = this.props.url.query.name

        getMessages(key)
          .then(function(messages){

            // messages displays function (snapshot) {snapshot.val()}
            // in console.log instead of my firebase object 
            console.log('msgs', messages)
          })
      }

我认为这个问题与const response有关,而且它没有返回firebase对象..

1 个答案:

答案 0 :(得分:0)

您需要从以下函数获得return值:

const response = await key.on('value', function(snapshot) {
   // snapshot.val(); --> this need to be returned
   return snapshot.val();
})