我的代码有离子3角5,如下所示
getUser(uid:string){
console.log('start of getUser with uid:' + uid)
return new Promise((resolve, reject) =>
{
this.db.object("/users/" + uid).snapshotChanges().map(
(snapshot) => {return snapshot.payload.val()}
).subscribe(
res => {
console.log('response:' + res)
resolve(res)
},
err => {
console.log(err)
reject(err)
}
)
})
}然而,对于离子4,.map不再起作用。如何转换此代码?
发布于 2018-11-26 05:20:01
就像你能看到这里一样
从5.5版开始,我们提供了"pipeable运算符“,可以在rxjs/操作符中访问它(注意复数的”操作符“)。这是一种比在rxjs包中找到的“修补程序”操作符更好地吸引您需要的操作符的方法。 注意:使用rxjs或rxjs/操作符而不对构建过程进行更改可能会导致更大的包。
现在您可以像这样使用map():
// RxJS
import { map } from 'rxjs/operators/map';
// ...
getUser(uid:string){
console.log('start of getUser with uid:' + uid)
return new Promise((resolve, reject) => {
this.db.object("/users/" + uid)
.snapshotChanges()
.pipe(
map((snapshot) => {
return snapshot.payload.val();
})
)
.subscribe(
res => {
console.log('response:' + res)
resolve(res)
},
err => {
console.log(err)
reject(err)
}
)
})
}与问题本身无关,但以防万一,如果希望getUser()方法返回承诺,也可以使用RXJS运算符(而不是创建和解决承诺),如下所示:
// RxJS
import { map } from 'rxjs/operators/map';
import { tap } from 'rxjs/operators/tap';
// ...
public getUser(uid: string): Promise<any> {
console.log('start of getUser with uid:' + uid)
return this.db
.object("/users/" + uid)
.snapshotChanges()
.pipe(
map((snapshot) => {
return snapshot.payload.val();
}),
tap((response) => {
console.log('response:' + response);
})
)
.toPromise()
}https://stackoverflow.com/questions/53475074
复制相似问题