我使用Ionic为我的应用程序连接到Firebase来提取数据。我在工厂中创建了一个承诺来提取数据,并认为它应该在屏幕上完成后呈现数据,但是在触摸屏幕之前我什么都没得到?
我没有收到任何错误,数据确实来了。
厂:
free
致电工厂:
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)
});
});
}
我觉得我说错了,否则就有一种我似乎无法找到的离子方法。
一旦完成请求,我将如何呈现数据?
提前致谢
答案 0 :(得分:1)
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。