【发布时间】:2017-01-27 13:07:15
【问题描述】:
我有一个按钮,它执行一个带有承诺的功能,该功能可以从 html 中的 firebase 获取和显示数据(我正在使用 angularJS、ionic 和 firebase)。
问题是:如果我不包含 .then(function(){}) 之后,promise 将以异步方式执行,这意味着我必须再次单击按钮,以便数据以 html 显示.
我想将数据放在 promise 之后的范围内(从 firebase 获取数据),但由于某种原因,只有在我在其后放置一个 .then 函数时才有效。
但是,数据在控制台中正常显示,但不是在 html 中(这意味着我认为该函数没有附加到范围)。
这是一段代码:
$scope.displayChat = function () {
var userId = firebase.auth().currentUser.uid; // Get ID
var deferred = $q.defer()
var db = firebase.database();
var ref = db.ref("12346787");
ref.on("value", function(snapshot) {
console.log(snapshot.val());
$scope.chatArray = snapshot.val();
deferred.resolve()
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
})
return deferred.promise.then(function(){
// Removing this empty .then(function(){}) function
// will result in asynchronousity.
// just "return deferred.promise;" doesn't work.
})
}
有什么解决办法吗?我对承诺没有太多经验,但我没有找到任何相关的东西。干杯。
【问题讨论】:
-
为什么需要承诺?你注意到解决任何问题。 deferred.resolve() --> 不解析任何值。
标签: javascript angularjs firebase ionic-framework firebase-realtime-database