2017-09-16 3 views
5

Google Firebase에서 데이터 목록을 나열하거나 가져 오는 동안 수집 한 데이터를 어떻게 페이징 할 수 있습니까? 예를 들어 ,어떻게 Firebase에서 페이지 매김을 할 수 있습니까?

countries = [ 
    {name: 'Afghanistan', code: 'AF'}, 
    {name: 'Åland Islands', code: 'AX'}, 
    {name: 'Albania', code: 'AL'}, 
... 
] 

내가 페이지 당 10로 나열 할 그리고 난 예를 들어 page =0 with size 10 또는 page=5 with size=5

+0

이 질문은 이미 다루어졌습니다. [다른 질문 사항] (https://www.google.com/search?q=site:stackoverflow.com+ 파이어베이스 + 페이지)을 읽고 이미 시도한 것이 있습니까? 그렇지 않다면 먼저 그 작업을 수행하고 문제가 발생할 경우 자세한 내용을보고하는 것이 좋습니다. –

+2

최근 답변 : https://stackoverflow.com/questions/45914345/how-to-read-firebase-database/45920801#45920801 –

+0

문제가 해결되지 않았습니다 ... 해결책이 있습니까? –

답변

2

을 얻으려면

{ 
    -KBZIPRqYmrRgNZ3GJt6: { asc: 1, desc: 9, name: "Rusty Kovacek"}, 
    -KBZIPRvieZbW-k9R9ra: { asc: 2, desc: 8, name: "Lloyd Feil" }, 
    -KBZIPRvieZbW-k9R9rc: { asc: 3, desc: 7, name: "Jasmin Hilll" }, 
    -KBZIPRwiXUgOtv3fCAL: { asc: 4, desc: 6, name: "Ms. Ibrahim Schinner" }, 
    -KBZIPRwiXUgOtv3fCAN: { asc: 5, desc: 5, name: "Dorothea Koepp" }, 
    -KBZIPRxpCAUyo5TJmY3: { asc: 6, desc: 4, name: "Melvin Marquardt" }, 
    -KBZIPRxpCAUyo5TJmY5: { asc: 7, desc: 3, name: "Celestine Bode" }, 
    -KBZIPRy5Uvz9wUOa6Jx: { asc: 8, desc: 2, name: "Emerald Olson" }, 
    -KBZIPRy5Uvz9wUOa6Jz: { asc: 9, desc: 1, name: "Miss Joey Jacobi" }, 
    -KBZIPRzRhuguDLLftQR: { asc: 10, desc: 0, name: "Ms. Denis Rutherford" } 
} 

var axios = require('axios'); 
var Firebase = require('firebase'); 
var namesRef = new Firebase('https://demos-firebase.firebaseio.com/dataDemo/names'); 


axios.get(namesRef.toString() + '.json?shallow=true') 
    .then(function (res) { 
    // This list is not sorted!!! 
    // res.data = { 
    // '-KBZIPRqYmrRgNZ3GJt6': true, 
    // '-KBZIPRwiXUgOtv3fCAN': true, 
    // '-KBZIPRy5Uvz9wUOa6Jx': true, 
    // '-KBZIPRzRhuguDLLftQR': true, 
    // '-KBZIPRxpCAUyo5TJmY5': true, 
    // '-KBZIPRxpCAUyo5TJmY3': true, 
    // '-KBZIPRwiXUgOtv3fCAL': true, 
    // '-KBZIPRvieZbW-k9R9ra': true, 
    // '-KBZIPRvieZbW-k9R9rc': true, 
    // '-KBZIPRy5Uvz9wUOa6Jz': true 
    // } 
    var keys = Object.keys(res.data).sort(); // Notice the .sort()! 
    var pageLength = 2; 
    var pageCount = keys.length/pageLength; 
    var currentPage = 1; 
    var promises = []; 
    var nextKey; 
    var query; 

    for (var i = 0; i < pageCount; i++) { 
     key = keys[i * pageLength]; 
     console.log('key', key); 
     query = namesRef.orderByKey().limitToFirst(pageLength).startAt(key); 
     promises.push(query.once('value')); 
    } 

    Promise.all(promises) 
     .then(function (snaps) { 
     var pages = []; 
     snaps.forEach(function (snap) { 
      pages.push(snap.val()); 
     }); 
     console.log('pages', pages); 
     process.exit(); 
     // pages = [{ 
     // '-KBZIPRqYmrRgNZ3GJt6': { 
     //  asc: 1, 
     //  desc: 9, 
     //  name: 'Rusty Kovacek' 
     // }, 
     // '-KBZIPRvieZbW-k9R9ra': { 
     //  asc: 2, 
     //  desc: 8, 
     //  name: 'Lloyd Feil' 
     // } 
     // }, { 
     // '-KBZIPRvieZbW-k9R9rc': { 
     //  asc: 3, 
     //  desc: 7, 
     //  name: 'Jasmin Hilll' 
     // }, 
     // '-KBZIPRwiXUgOtv3fCAL': { 
     //  asc: 4, 
     //  desc: 6, 
     //  name: 'Ms. Ibrahim Schinner' 
     // } 
     // }, { 
     // '-KBZIPRwiXUgOtv3fCAN': { 
     //  asc: 5, 
     //  desc: 5, 
     //  name: 'Dorothea Koepp' 
     // }, 
     // '-KBZIPRxpCAUyo5TJmY3': { 
     //  asc: 6, 
     //  desc: 4, 
     //  name: 'Melvin Marquardt' 
     // } 
     // }, { 
     // '-KBZIPRxpCAUyo5TJmY5': { 
     //  asc: 7, 
     //  desc: 3, 
     //  name: 'Celestine Bode' 
     // }, 
     // '-KBZIPRy5Uvz9wUOa6Jx': { 
     //  asc: 8, 
     //  desc: 2, 
     //  name: 'Emerald Olson' 
     // } 
     // }, { 
     // '-KBZIPRy5Uvz9wUOa6Jz': { 
     //  asc: 9, 
     //  desc: 1, 
     //  name: 'Miss Joey Jacobi' 
     // }, 
     // '-KBZIPRzRhuguDLLftQR': { 
     //  asc: 10, 
     //  desc: 0, 
     //  name: 'Ms. Denis Rutherford' 
     // } 
     // }] 

     }); 
    });