javascript - NativeScript Firebase es6 promise 出现奇怪的行为

标签 javascript typescript firebase-realtime-database nativescript es6-promise

我正在尝试使用 Promise 链接 2 个 Firebase 查询,因为我需要第一个查询的结果才能获取第二个查询。以下是两个查询的结构:

查询值 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内 函数在 console.log(result) 内之前打印 getValueA 函数(为什么?)
  2. this.valueAgetValueB 中是 undefined,使我的查询毫无用处
  3. 应用崩溃

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

最佳答案

使用 Promise 时,您必须在回调中解析结果。 请找到下面的代码:

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

关于javascript - NativeScript Firebase es6 promise 出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39689543/

相关文章:

javascript - BackboneJS View 更新

java - Firebase 数据返回 null

javascript - 带有 Union 的条件类型

typescript - WebStorm 2017.1 : TypeScript: import can be shortened inspection issue

javascript - 如何处理 Angular 上滚动顶部\底部的事件?

java - 我得到我的 Firebase 用户 Uid 但它的 dataSnapshot 键值返回 null

android - 获取数据库时出现无效的 Firebase 路径错误

php - 重定向到单个搜索结果?

javascript - 我可以在 TypeScript 中获取当前行号吗

javascript - 将 JSON 与 Dygraph 和日期时间结合使用