【问题标题】:How to pass promise result into outer function?如何将承诺结果传递给外部函数?
【发布时间】:2017-08-07 11:15:12
【问题描述】:
function readData(field) {
    var profileDatabase = firebase.database();
    var user = firebase.auth().currentUser;
    var name = user.email.substring(0, user.email.indexOf("@"));
    return profileDatabase.ref('/users/' + name + 'id').once('value').then(function (snapshot) {
        return snapshot.val()[field];
    });
}

我希望 readData 函数返回 snapshot.val()[field],但 Promise 是异步的。我该如何解决?

【问题讨论】:

    标签: javascript callback promise


    【解决方案1】:

    你所做的完全正确:从then回调返回,从readData返回调用then的结果。 then 创建的 promise 将使用该值自行解析,使用 readData 的调用者将在其 then 回调中看到它。

    readData(field).then(function(value) {
        // Here, `value` is the value from `snapshot.val()[field]`
    });
    

    这里是一个例子(使用setTimeout模拟数据库操作):

    function fakeDatabaseOperation() {
      return new Promise(function(resolve) {
        setTimeout(function() {
          resolve({
            val: function() {
              return {foo: "bar"};
            }
          });
        }, 500);
      });
    }
    function readData(field) {
        /*
        var profileDatabase = firebase.database();
        var user = firebase.auth().currentUser;
        var name = user.email.substring(0, user.email.indexOf("@"));
        */
        return fakeDatabaseOperation().then(function (snapshot) {
          console.log("Got snapshot here");
          return snapshot.val()[field];
      });
    }
    
    readData("foo").then(function(val) {
      console.log("Value here: " + val);
    });

    【讨论】:

      猜你喜欢
      • 2019-01-08
      • 1970-01-01
      • 2017-07-16
      • 2022-12-04
      • 2017-08-04
      • 2019-12-13
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多