Firebase会返回快照,但无法访问值

时间:2016-04-01 17:02:25

标签: javascript firebase firebase-realtime-database

Peep始终从函数返回为undefined。有人能指出我的问题吗?在success函数中,按预期返回快照。我认为这是一个范围问题。

function getPerson( id ) {

    var ref = new Firebase( "https://foo.firebaseio.com/people/" + id ),
    peep;

    // Attach an asynchronous callback to read the data at our people reference
    ref.once( "value", function( snapshot ) {
        //success
        peep = snapshot;

    }, function ( errorObject ) {
        //error
        //console.log( "The read failed: " + errorObject.code );
    });

    return peep;

}

3 个答案:

答案 0 :(得分:3)

once()方法是异步的,这就是使用回调的原因。您可以将回调作为参数传递给getPerson function以及ID。

function getPerson(id, callback) {
  var ref = new Firebase( "https://foo.firebaseio.com/people/" + id );

  ref.once( "value", function(snapshot) {
    var peep = snapshot;
      // error will be null, and peep will contain the snapshot
      callback(null, peep);
    }, function (error) {
      // error wil be an Object
      callback(error)
  });
}

getperson('9234342', function (err, result) {
  console.log(result);
});

答案 1 :(得分:2)

是的,应该是因为没有立即触发成功回调。它接收数据然后进入它。

尝试在回调中返回getPerson('9234342').then(function(snapshot) { console.log(snapshot.val()); }).catch(function(error) { console.error(error); }); ,例如。

peep

希望它有所帮助。

答案 2 :(得分:1)

fun = @(x1,x2,x3) (x2-x1.^2).^2+(1-x1).^2 + x3; 方法是异步的,这就是使用回调的原因。您甚至在有值之前返回once()。在回调中定义后,您需要返回peep

peep

然后像这样使用它:

function getPerson( id ) {

    var ref = new Firebase( "https://foo.firebaseio.com/people/" + id ),
    peep;

    // Attach an asynchronous callback to read the data at our people reference
    return ref.once( "value", function( snapshot ) {
        //success
        peep = snapshot;
        return peep;
    }, function ( errorObject ) {
        //error
        //console.log( "The read failed: " + errorObject.code );
    });
}