0
私は2番目のものを得るために最初のクエリの結果が必要なので、約束を使って2つのFirebaseクエリを連鎖しようとしています。ここでは2つのクエリの構造は次のとおりです。VALUE A FORNativeScript Firebase es6は奇妙な動作を約束します
QUERY:VALUEのB FOR
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'
}
});
}
QUERY:
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'
}
});
}
}
私は、次の操作を行って、一緒にチェーンにそれらを試してみてください。
結果は次のとおりです。
getValueB 内部関数が(なぜ??)this.valueA
は私のクエリは無用作り、getValueB
でundefined
ある getValueA関数内前にconsole.log(結果)を印刷します何らかの理由で210
- のAppは
が間違っウィット何がクラッシュします私のコードですか?私はこの問題のために別のアプローチを使用すべきでしょうか? これを調べていただきありがとうございます。
これはそれでした!ありがとう –
しかし、1つの質問...これは反パターンとは考えられていませんか? http://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how-do-i-avoid-it –
私は反パターンを知らなかった。私は何か新しいことを学んだ、ありがとう!あなたのリンクのgithubページを分析した後、私は私の答えがアンチパターンだとは思わない。 'firebase.query'は結果と共に' Promise'を返さないからです。結果コールバックを持つ関数です。ですから、Promiseのような外部ライブラリなしで使用したい場合は、それを 'Promise'コンストラクタでラップする必要があります。それ以外の場合は、githubページのmentionnedのような 'promisify'ライブラリを使うことができます。 – Guillaume