Como todas as operações assíncronas do driver MongoDB já retornam uma promessa, você não deve usar
new Promise
nada, mas configure uma cadeia de promessas: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;
});
}
Entendo que você deseja passar
database
como argumento para o próximo then
, mas você encontrará o problema de que ele não estará disponível no catch
manipulador. Uma solução é usar uma variável com escopo de função que é atribuída após a abertura da conexão, como o código acima. Se você não gostar disso, você pode criar uma nova cadeia de promessas dentro do
.then
manipulador para 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;
});
});
}