来自ES6承诺的数据在页面上不显示,直到我点击它?
问题描述:
我使用Ionic为我的应用程序提供与Firebase的连接来提取数据。我在工厂创建了一个承诺,将数据拉下来,并认为它应该在屏幕上显示数据,但在我触摸屏幕之前我什么也没有得到。来自ES6承诺的数据在页面上不显示,直到我点击它?
我没有得到任何错误,数据确实来了。
厂:
all: function() {
return new Promise ((resolve, reject) => {
firebase.database().ref('desks').once('value').then(snapshot => {
let desks = []
snapshot.forEach((child) => {
desks.push(child.val());
});
resolve(desks)
});
});
}
调用工厂:
Office.all().then(function (data) {
console.log(data);
$scope.officeList = data;
});
我觉得我打电话是错误的,否则有一个离子的方法,我似乎无法找到。
一旦完成请求,我将如何能够呈现数据?
在此先感谢
答
ES6承诺不与AngularJS框架集成。使用$q.when将ES6承诺转换为AngularJS承诺。只有那些在AngularJS执行上下文应用业务将受益于AngularJS的数据绑定,异常处理,性能看,等
all: function() {
̶r̶e̶t̶u̶r̶n̶ ̶n̶e̶w̶ ̶P̶r̶o̶m̶i̶s̶e̶ ̶(̶(̶r̶e̶s̶o̶l̶v̶e̶,̶ ̶r̶e̶j̶e̶c̶t̶)̶ ̶=̶>̶ ̶{̶
var es6promise = firebase.database()
.ref('desks').once('value')
.then(snapshot => {
let desks = []
snapshot.forEach((child) => {
desks.push(child.val());
});
̶r̶e̶s̶o̶l̶v̶e̶(̶d̶e̶s̶k̶s̶)̶
return desks;
});
return $q.when(es6promise);
}
此外,还要避免使用Promise(resolve,reject
创造新的承诺。请使用.then method返回的承诺。它返回一个新承诺这是通过successCallback
的返回值解决或拒绝,errorCallback
(除非该值是一个承诺,在这种情况下它与在使用promise chaining这一承诺解决价值解决)。
欲了解更多信息,请参阅You're Missing the Point of Promises。
讨论了很多次。 Promise回调是在Angular的范围之外执行的,所以*脏检查*不起作用,绑定不会更新。在分配数据后,只需使用'$ scope。$ apply();'$ scope.officeList = data;' –
谢谢。不知道为什么我在查找时没有遇到它:/。希望能够在一段时间内改变本机的反应,希望它会更干净。 – SmiffyKmc