javascript - 如何将 promise 结果传递给外部函数?

标签 javascript callback promise

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 是异步的。我该如何解决?

最佳答案

你所做的是完全正确的:从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);
});

关于javascript - 如何将 promise 结果传递给外部函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42831393/

相关文章:

Javascript window.open 文件下载回调

scala - 使用 onComplete 时限制 Scala Future block

javascript - Promise 的 resolve 和 reject 函数的返回类型是什么?

javascript - 精细 uploader : Thumbnails on the fly clientside

javascript - 比较负值在 Javascript 中不能正常工作

c - 如何动态分配函数代码?

c# - 未在客户端调用 WCF 回调并在服务器端挂起

javascript - 从 Promise.all 解构为对象

javascript - 使用 Promise.all 时,Node_Redis HGET 解析为 bool 数组

javascript - 如何在不重置刻度文本属性的情况下转换 D3 轴?