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();
   });
}

结果如下:

  1. 出于某种原因 console.log(result)getValueB 中 函数在 before console.log(result) 内打印 getValueA 函数(为什么??)
  2. this.valueAgetValueB 中的 undefined,使我的查询无用
  3. 应用程序崩溃

我的代码有什么问题?我应该使用另一种方法来解决这个问题吗? 预先感谢您对此进行调查:)

使用承诺时,您必须在回调中解析结果。 请找到以下代码:

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' 
                    }
                }));
        });
    }
}