2016-07-15 52 views
0

我試圖從網站加載本地PouchDB結果。一旦結果在本地加載,我不想再次下載它們。pouchDB檢索allDocs原始查詢

爲了避免這種情況,我得到了一個存在的文件列表,然後測試它是否在獲取之前加載它。

function DownloadFile($fname){ 
     $query = { 
      include_docs: false, 
      attachments: false, 
      startkey: ['run',$fname].join(','), 
      endkey: ['run',$fname,'\uffff'].join(',') 
     }; 
     db.allDocs($query).then(function (result) { 
      if (result.rows.length !== 0) return; 
      $url = './runDb/' + $fname + '/results.xml'; 
      $.ajax({ 
       url: $url, 
       type: "GET", 
       dataType: "xml", 
       contentType: "text/xml", 
       async: true, 
       success: function (results,status,xhr) { 
        app.ParseResults($fname,results) 
       } 
      }); 
     }).catch(function (err) { 
      console.log(err); 
     }); 
} 

我遇到的問題是,到時候DownloadFile獲取的所謂的100倍和allDocs查詢最終返回的東西,我已經不知道什麼原始的查詢返回任何結果。

PouchDb中有一種方法可以確定用於生成給定結果集的查詢參數嗎?

編輯:雖然我真的很喜歡接受的答案,但看起來這是一個愚蠢的問題。實驗(在瀏覽器中)指示$query$fname將包含啓動allDocs調用的特定調用的正確範圍值。

換句話說,我並不需要做任何事情,它只是起作用。顯然,這很大程度上取決於JS的實現,因此接受的答案更好,因爲它清楚地表明瞭期望的結果。

+0

我常常驚訝於JavaScript變量範圍的黑暗巫師,以及它處理的奇怪場景過多。 –

回答

1

這與PouchDB無關,它是一種可用於各種類似情況的解決方案。

下面的答案假設您有一個有效的Promise對象掛起。

function DownloadFile($fname){ 
    $query = { 
     include_docs: false, 
     attachments: false, 
     startkey: ['run',$fname].join(','), 
     endkey: ['run',$fname,'\uffff'].join(',') 
    }; 
    return Promise.all([ 
    $query, 
    db.allDocs($query), 
    ]).then(function (resp) { 

    // you'll have your query right here. 
    var $query = resp[0] 
    var result = resp[1] 

    if (result.rows.length !== 0) return; 
    $url = './runDb/' + $fname + '/results.xml'; 
    $.ajax({ 
     url: $url, 
     type: "GET", 
     dataType: "xml", 
     contentType: "text/xml", 
     async: true, 
     success: function (results,status,xhr) { 
     app.ParseResults($fname,results) 
     } 
    }); 
    }).catch(function (err) { 
    console.log(err); 
    }); 
}