चूंकि MongoDB ड्राइवर के सभी अतुल्यकालिक संचालन पहले से ही एक वादा लौटाते हैं, इसलिए आपको new Promise
का उपयोग नहीं करना चाहिए बिल्कुल, लेकिन एक वादा श्रृंखला स्थापित करें:
function updateDatabase(name, token) {
let database;
return MongoClient.connect(MONGODB_URL).then(db => {
database = db;
return database
.collection("testCollection")
.update({ name }, { $pull: { tokens: { $in: [token] } } });
})
.then(() => {
return database.collection("log").insert({
name,
token
});
})
.then(() => {
database.close(true);
})
.catch(err => {
database.close(true);
throw err;
});
}
मैं समझता/समझती हूं कि आप database
pass पास करना चाहते हैं अगले then
. के लिए एक तर्क के रूप में , लेकिन आप इस समस्या का सामना करेंगे कि यह catch
. में उपलब्ध नहीं होगा हैंडलर। एक समाधान एक फ़ंक्शन-स्कोप्ड वैरिएबल का उपयोग करना है जो कनेक्शन खोलने के बाद असाइन किया जाता है, जैसा कि ऊपर दिया गया कोड करता है।
अगर आपको यह पसंद नहीं है, तो आप .then
. के अंदर एक नई वादा श्रृंखला बना सकते हैं MongoClient.connect
. के लिए हैंडलर :
function updateDatabase(name, token) {
return MongoClient.connect(MONGODB_URL).then(database => {
return database
.collection("testCollection")
.update({ name }, { $pull: { tokens: { $in: [token] } } })
.then(() => {
return database.collection("log").insert({
name,
token
});
})
.then(() => {
database.close(true);
})
.catch(err => {
database.close(true);
throw err;
});
});
}