我尝试做的是允许指定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);
提前谢谢你,
詹姆斯
编辑(2018年8月6日):我认为这个问题与其他建议的问题不同,因为存在sort_order不是未定义的情况,并且可以预先指定。使用另一个问题的答案,可能必须写入重复(在if语句内和if语句之后的回调中)
发布于 2018-06-08 06:48:50
您应该从回调转移到Promise或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
标记它,以便它“等待”您的数据。
https://stackoverflow.com/questions/50751048
复制相似问题