Domanda

Ho una dichiarazione for-loop e un corpo di anello di Async MongoDb.Quello che voglio fare è creare una query find dal mio database del mio mongolodb e premere il risultato in un array.

Ecco il codice:

function() arrResult() {
  var arr = [];
  for(...) {
    collection.find({ foo: i }, function (err, cursor) {
      arr.push(cursor);   
    }    
  }
  return arr;
}
.

Ma è ovvio che il valore di ritorno della funzione sarebbe un array vuoto.

Voglio affrontare questo problema utilizzando il modulo Q.C'è qualche soluzione?

È stato utile?

Soluzione

.

Voglio affrontare questo problema usando il modulo Q.C'è qualche soluzione?

Sì, le promesse sono un'astrazione molto semplice per affrontare questo.È possibile eseguire le domande in parallelo e raccogliere i loro risultati con all .

In particolare, con Q sembrerebbe questo:

function arrResult(…) {
    var promises = [];
    for (…)
        promises.push( Q.ninvoke(collection, "find", {foo: i}) );
    return Q.all(promises);
}

arrResult(…).then(function(arr) {
    …
}, function(err) {
    // first error, if any occured
});
.

Altri suggerimenti

È necessario un meccanismo di sincronizzazione che agisce come un cancello di processo. Ogni query di ritorno deve arrivare al cancello, ad es.Decrementa qualche contatore e deposita il suo risultato. Quando tutti sono arrivati al cancello, un callback finale restituisce i risultati raccolti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top