2016-12-14 6 views
1

この関数は、ユーザーがページを読み取ったと記録し、ユーザーが次のページをクリックするとトリガーされます。配列内の項目がこの値と等しいかどうかを調べる

それが私の目標は、ユーザーだけが、例えば読まれていないページをログにある

データベースへのサブスクライブを初、ユーザーが読んでいるすべてのページのリストを取得します。..

データベースにはありません。

この関数は、データベースから返されたリストに、ちょうど読み込まれたページと同じページ番号が含まれている場合、そのページを読み取ったとしてログに記録しません。

最初のクリックでしかし、この唯一の作品と私は再び同じページにアクセスし、次をクリックした場合、それはデータベースにページ番号を記録します...

このバグを修正する方法上の任意の提案、このコードの上に別の目を必要とする私は単純なことを知っている..乾杯!

logAsWatched() { 
let uid = this.windowRef.nativeWindow.firebase.auth().currentUser.uid; 
this.projectId = this.uidpage.project.id; 
this.subscription = this.af.database.list(`pagelogs/${uid}/${this.projectId}`).subscribe(
    data => { 
    console.dir(data); 
    if (data.length >= 1) { 
     let pagelogArray = []; 
     for (let i = 0; i < data.length; ++i) { 
     let pageNumber = data[i]; 
     pagelogArray.push(pageNumber); 
     } 
     console.log('pagelogArray', pagelogArray); 
     console.log('page order', this.pageOrder); 

     let newArray = []; 

     for (let i = 0; i < pagelogArray.length; ++i) { 
     newArray.push(pagelogArray[i].pNumber); 
     } 
     console.log(`newArray : ${newArray}`); 
     if (!newArray.indexOf(this.pageOrder)) { 
     console.log('page has allready been logged'); 
     } else { 
     console.log('logging this page as watched'); 
     this.setLogAsWatchedData(); 
     } 
    } else { 
     console.log('No page logs have been added'); 
     this.setLogAsWatchedData(); 
    } 
    }, (error) => { console.log(`page log error: ${error}`); } 
); 

}

setLogAsWatchedData() { 
    this.subscription.unsubscribe(); 
    let uid = this.windowRef.nativeWindow.firebase.auth().currentUser.uid; 
    this.windowRef.nativeWindow 
     .firebase.database(). 
     ref(`pagelogs/${uid}/${this.projectId}`) 
     .push().set({ pNumber: this.pageOrder }); 

    } 
+0

ログされたページが間違ってチェックされます: 'if(!newArray.indexOf(this.pageOrder))'。 'if(newArray.indexOf(this.pageOrder)!== -1)' –

答えて

1

私はあなたが読んでいない対読まとしてログインしているアウトページに、フィルター[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter]を使用する方法に見ることができると思います。

+0

@ Ryan Basmajianに感謝します!しかし、バグはまだコード内にあります。 その奇妙なのは、データがサーバーに送信される場所が2つしかないからです。これは、console.logの下の2つのif文の最後にあります。 '} else { console.log( 'このページを監視してログに記録する'); this.setLogAsWatchedData(); } else { console.log( 'ページログが追加されていません'); this.setLogAsWatchedData(); ' これは、console.logがコンソールに表示されなくなったときにページが2回目に記録されるときです... – Dave

+0

データを購読するのではなく、約束を使って返すようにコードをリファクタリングして終了しました。これにより、データが2回目に記録される問題が修正されました。乾杯! – Dave

関連する問題