NativeScript Firebase es6 承诺会出现奇怪的行为
NativeScript Firebase es6 promises weird behaviour
我正在尝试使用承诺链接 2 个 Firebase 查询,因为我需要第一个查询的结果才能获得第二个查询。这是 2 个查询的结构:
查询值 A:
private getValueA(){
var queryEvent = (result):void =>{
console.dump(result);
this._valueA = result.value;
}
return firebase.query(
queryEvent,
FirebaseValueAPath,
{
singleEvent : true,
orderBy : {
type: firebase.QueryOrderByType.CHILD,
value: 'since'
}
});
}
查询值 B:
private getValueB{
let FirebaseValueBPath :string = this._valueA
var queryEvent = (result) :void =>{
console.dump(result);
if(result.value){
this._valueB = result.value;
}
}
return firebase.query(
queryEvent,
FirebaseValueBPath,
{
singleEvent : true,
orderBy : {
type : firebase.QueryOrderByType.CHILD,
value : 'since'
}
});
}
}
然后我尝试通过执行以下操作将它们链接在一起:
constructor(){
this.getValueA().then(
(success) :void => {
this.getValueB();
});
}
结果如下:
- 出于某种原因
console.log(result)
在 getValueB 中
函数在 before console.log(result) 内打印
getValueA 函数(为什么??)
this.valueA
是 getValueB
中的 undefined
,使我的查询无用
- 应用程序崩溃
我的代码有什么问题?我应该使用另一种方法来解决这个问题吗?
预先感谢您对此进行调查:)
使用承诺时,您必须在回调中解析结果。
请找到以下代码:
class GetData {
constructor() {
this.getValueA()
.then(resultA => this.getValueB(resultA));
}
getValueA() {
return new Promise<string>((resolve, reject) => {
firebase.query(
(result) => {
resolve(result.value); // Resolve => returns the result
},
FirebaseValueAPath,
{
singleEvent : true,
orderBy : {
type: firebase.QueryOrderByType.CHILD,
value: 'since'
}
}));
});
}
getValueB(valueA: string) {
return new Promise<string>((resolve, reject) => {
firebase.query(
(result) => {
resolve(result.value); // Resolve => returns the result
},
valueA,
{
singleEvent : true,
orderBy : {
type: firebase.QueryOrderByType.CHILD,
value: 'since'
}
}));
});
}
}
我正在尝试使用承诺链接 2 个 Firebase 查询,因为我需要第一个查询的结果才能获得第二个查询。这是 2 个查询的结构:
查询值 A:
private getValueA(){
var queryEvent = (result):void =>{
console.dump(result);
this._valueA = result.value;
}
return firebase.query(
queryEvent,
FirebaseValueAPath,
{
singleEvent : true,
orderBy : {
type: firebase.QueryOrderByType.CHILD,
value: 'since'
}
});
}
查询值 B:
private getValueB{
let FirebaseValueBPath :string = this._valueA
var queryEvent = (result) :void =>{
console.dump(result);
if(result.value){
this._valueB = result.value;
}
}
return firebase.query(
queryEvent,
FirebaseValueBPath,
{
singleEvent : true,
orderBy : {
type : firebase.QueryOrderByType.CHILD,
value : 'since'
}
});
}
}
然后我尝试通过执行以下操作将它们链接在一起:
constructor(){
this.getValueA().then(
(success) :void => {
this.getValueB();
});
}
结果如下:
- 出于某种原因
console.log(result)
在 getValueB 中 函数在 before console.log(result) 内打印 getValueA 函数(为什么??) this.valueA
是getValueB
中的undefined
,使我的查询无用- 应用程序崩溃
我的代码有什么问题?我应该使用另一种方法来解决这个问题吗? 预先感谢您对此进行调查:)
使用承诺时,您必须在回调中解析结果。 请找到以下代码:
class GetData {
constructor() {
this.getValueA()
.then(resultA => this.getValueB(resultA));
}
getValueA() {
return new Promise<string>((resolve, reject) => {
firebase.query(
(result) => {
resolve(result.value); // Resolve => returns the result
},
FirebaseValueAPath,
{
singleEvent : true,
orderBy : {
type: firebase.QueryOrderByType.CHILD,
value: 'since'
}
}));
});
}
getValueB(valueA: string) {
return new Promise<string>((resolve, reject) => {
firebase.query(
(result) => {
resolve(result.value); // Resolve => returns the result
},
valueA,
{
singleEvent : true,
orderBy : {
type: firebase.QueryOrderByType.CHILD,
value: 'since'
}
}));
});
}
}