čítal som Ako používať MongoDB so sľubmi v Node.js? keď som videla, že v prvej odpovedi hovoria, že ak nepodrobím žiadnu spätnú väzbu, mongo vodič mi vráti sľub. Pracovalo to na "pripojenie", ale to nefungovalo, keď som sa snažil:
db.collection("myCollection").find().then((docs)=>{console.log(docs)})
Mám:
MongoDB error: TypeError: db.collection(...).find(...).then is not a function
Snažil som sa prečítať dokumentáciu pre find()
na http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#find a vidím niekoľko príkladov, ktoré robia takéto veci:
collection.find({}).explain().then(function(docs) {
test.ok(docs != null);
db.close();
});
toto je sľub na nájdenie, ale má to explain()
vec. Čo je to? Prečo sa v tejto API neuvádza ani sľuby? Existuje aj ďalší riadok, ktorý robí:
collection.insertMany([{a:1}, {a:2}, {a:3}], {w:1}).then(function(result) {
čo je tiež sľub.
Takže, ako používať sľuby pomocou find ()?
Tiež prečo táto dokumentácia nepovedie návratové hodnoty čokoľvek? Ani argumenty, ktoré môžem použiť ...
odpovede:
2 pre odpoveď č. 1To, čo hľadáte, je toArray()
, ktorý funguje tak, ako chcete (spätné volanie vo vnútri alebo vrátenie sľubu, ak nie spätné volanie)
db.collection("...").find().toArray()
.then(function(docs) {
// =)
});
To je preto, že db.collection("..").find()
vráti kurzor, nie sľub.
Toto správanie je určené preto, lebo "nájsť ako celok" nie je jediný model, ktorý sa dá použiť (tj sú povolené toky).