2016-07-15 4 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); 
     }); 
} 

私が午前問題はallDocsクエリが最終的に何かを返す時間DownloadFile取得者と呼ばれる100倍と、私はもはや結果が返されなかったことを、元の何のクエリを知っているということではありません。

与えられた結果セットを生成するために使用されたクエリパラメータをPouchDbで判断する方法はありますか?

編集:私は受け入れられた答えが本当に好きですが、これはばかな質問だったようです。実験(ブラウザ)は、と$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); 
    }); 
} 
関連する問題