2014-01-12 2 views
0

이유는 모르지만 PouchDB를 사용하여 indexedDB에서 데이터를 가져 와서 변수에 저장하는 데 문제가 있습니다.PouchDB 데이터를 변수에 저장하는 데 문제가 발생했습니다.

load_all = function() { 
    var database = new PouchDB('ProjectDB'); 
    var remoteCouch = false; 
    database.allDocs({include_docs: true, descending: true}, function(error, doc) { 
    if (error) ... 
    else { 
     if (doc.rows.length > 0) return doc.rows; 
     else ... 
    } 
    }); 
} 

var projects = load_all(); 
console.log(projects); // will log 'undefined' 

나는 아무 생각 왜 못해, 일이 없다 :

나는 이런 식으로, 내 데이터베이스에서 모든 데이터를 가져 오는 기능을 가지고있다. 라인에서

+1

pouchDB에 대한 경험이 없지만 도움이 될만한 몇 가지 일반적인 팁이 있습니다. 먼저 함수가 전혀 실행되지 않는지 확인하십시오. 네가 정의되지 않았기 때문에 나는 그것이 아닌 것 같아. 그것이 왜 달리지 않는지 알아 내지 못하면, 그렇다면 아마도 당신의 상황에 무언가가있을 것입니다. –

+0

이것은 비동기 작업이므로 반환하지 않습니다. 익명 함수를 만드는 대신 변수 프로젝트를 설정할 수있는 콜백 함수를 만들 수 있습니다. –

답변

1

봐 :

 if (doc.rows.length > 0) return doc.rows; 

당신은 그 doc.rows의 내용을 반환 할 것으로 예상 그래서 당신 console.log(projects); 바로, 당신이 표시됩니다? 글쎄, 그게 무슨 일이 아니야. return 문은 load_all 함수가 아닌 콜백 함수 (function(error, doc) {)에서 반환됩니다. doc.rows에 도착하려면 콜백 함수 내에서 수행해야합니다. 이와 같이 :

 if (doc.rows.length > 0) console.log(doc.rows); 

이유는 IndexedDB가 비동기이기 때문입니다. 그것이 의미하는 바를 이해하고 코드를 작성한 것처럼 작동하지 않는 이유는 IndexedDB 또는 비동기 자바 스크립트에 대한 일부 자습서를 Google에 추천합니다. (죄송합니다. 머리).

관련 문제