【问题标题】: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);
});