gpt4 book ai didi

Node.JS 等待变量被设置

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:10 25 4
gpt4 key购买 nike

我想做的是允许指定 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 语句之后)

最佳答案

您应该从回调转向 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 block ):

 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 标记它,这样它“等待”您的数据。

关于Node.JS 等待变量被设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50751048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com