MongoDBドライバーのすべての非同期操作はすでにpromiseを返すため、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
を渡したいとのことですが 次のthen
の引数として 、ただし、catch
では利用できないという問題が発生します ハンドラ。 1つの解決策は、上記のコードのように、接続を開いた後に割り当てられる関数スコープの変数を使用することです。
それが気に入らない場合は、.then
内に新しいpromiseチェーンを作成できます。 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;
});
});
}