【发布时间】:2019-01-20 19:28:03
【问题描述】:
我有一个代码可以在 firebase 实时数据库中创建一条新记录,如下所示
assignCoupon(email:string, discType: string, discVal: number, code:string){
let coupon = {
"discType" : discType,
"discVal": discVal,
"code": code
}
this.db.list('/users/' + uid + '/coupons').push(coupon).then(
(resp) => console.log("user created with:" + resp)
)
}
这很好用。但我需要将响应作为承诺返回给调用代码,以便我可以向用户显示消息。与 snapshotChanges() 不同,它不会返回订阅。那么在这种情况下我该怎么做呢?要清楚尝试使用与我下面的代码中相同的样式
getOrderHistory(uid:string){
console.log('start of getOrderHistory with uid:' + uid)
return new Promise((resolve, reject) =>
{
this.db.object("/users/" + uid + "/orders").snapshotChanges().map(
(snapshot) => {return snapshot.payload.val()}
).subscribe(
res => {
//console.log('response:' + res)
resolve(res)
},
err => {
console.log(err)
reject(err)
}
)
})
}
【问题讨论】:
-
我不明白。
push()返回一个类似承诺的对象。您甚至可以在代码中直接调用then()。这个承诺有什么问题吗? -
问题是我无法将其返回到我的 UI 端的调用函数以显示警报等。就像我给出的第二个示例一样,我将数据返回到调用方法。
-
你不能只
return this.db.list(...).push(...)?那应该从你的函数中返回承诺。
标签: angular firebase firebase-realtime-database promise