我要做的是允许指定sort_order或留空。 当它被指定时,它被使用。 如果未指定,则查询数据库以获取最高编号,然后递增并使用该编号。 我的问题是数据库调用是异步并在“if”语句中。
在将新数据插入数据库之前,确保“sort_order”未定义的最佳做法是什么?
一段代码如下所示:
if (sort_order == undefined) {
MongoClient.connect(dbUrl, function (err, db) {
var dbo = db.db("HIDDEN");
dbo.collection("HIDDEN").findOne({}, {"sort": { sort_order: -1 } }, function (err, data) {
sort_order = data.sort_order + 1;
});
});
}
console.log(sort_order);
提前致谢,
詹姆斯
编辑(08/06/2018):我认为这个问题与建议的其他问题不同,因为有些情况是sort_order未定义且可以预先指定。使用其他问题的答案,可能必须写入副本(在if语句内部和if语句之后的回调内)
答案 0 :(得分:0)
你应该从回调转移到Promises或Async / Await,后者更容易阅读:
async function retrieveValue(sort_order) {
if (sort_order === undefined) {
const db = await MongoClient.connect(dbUrl);
const dbo = db.db("HIDDEN");
const data = await dbo.collection("HIDDEN").findOne({}, {"sort": { sort_order: -1 }});
return data.sort_order + 1;
};
return sort_order;
}
编辑(使用try-catch块):
async function retrieveValue(sort_order) {
try {
if (sort_order === undefined) {
const db = await MongoClient.connect(dbUrl);
const dbo = db.db("HIDDEN");
const data = await dbo.collection("HIDDEN").findOne({}, {"sort": { sort_order: -1 }});
return data.sort_order + 1;
}
} catch (error) {
console.log(error);
}
return sort_order;
}
您在定义时基本上将该功能标记为async
,并且只要您预期Promise
,就会使用await
对其进行标记,以使其“等待”您的数据。