0
我試圖鏈接2使用承諾的Firebase查詢,因爲我需要第一個查詢的結果來獲得第二個。這裏是2所查詢的結構:NativeScript Firebase ES6承諾奇怪的行爲
查詢值:
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();
});
}
其結果如下:
- 對於內部getValueB 功能因故
console.log(result)
被內部 以前的console.log(結果)打印getValueA功能(爲什麼?) this.valueA
是getValueB
undefined
,使我的查詢沒用- 應用程序崩潰
什麼是錯的機智我的代碼?我應該使用另一種方法來解決這個問題嗎? 預先感謝您對此進行調查:)
這樣做了!謝謝 –
雖然......有一個問題不是被認爲是反模式嗎? http://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how-do-i-avoid-it –
我不知道反模式。我學到了一些新東西,謝謝!在分析鏈接中的github頁面之後,我不認爲我的答案是反模式。因爲'firebase.query'不會返回帶有結果的'Promise'。這是一個帶結果回調的函數。所以,如果你想以Promise的方式使用它,而沒有任何EXTERNAL LIBRARY,你必須將它包裝在'Promise'構造函數中。否則,你可以像github頁面中提到的那樣使用'promisify'庫。 – Guillaume