Karena semua operasi asinkron dari driver MongoDB sudah mengembalikan janji, Anda tidak boleh menggunakan new Promise
sama sekali, tetapi buatlah rantai janji:
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;
});
}
Saya mengerti bahwa Anda ingin meneruskan database
sebagai argumen untuk then
. berikutnya , tetapi Anda akan mengalami masalah bahwa itu tidak akan tersedia di catch
pawang Salah satu solusinya adalah dengan menggunakan variabel cakupan fungsi yang ditetapkan setelah membuka koneksi, seperti kode di atas.
Jika Anda tidak menyukainya, Anda dapat membuat rantai janji baru di dalam .then
handler untuk 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;
});
});
}