首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Node.JS正在等待设置变量

Node.JS正在等待设置变量
EN

Stack Overflow用户
提问于 2018-06-08 06:36:04
回答 1查看 2.9K关注 0票数 1

我尝试做的是允许指定sort_order或将其保留为空。当它被指定时,它将被使用。如果未指定该值,则查询数据库以获取最大值,该值将递增并使用。我的问题是数据库调用是异步的,并且在"if“语句中。

在向数据库插入新数据之前,确保"sort_order“不是未定义的最佳实践是什么?

下面显示了一段代码:

代码语言:javascript
复制
  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语句之后的回调中)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 06:48:50

您应该从回调转移到Promise或Async/Await,后者更容易阅读:

代码语言:javascript
复制
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块):

代码语言:javascript
复制
 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标记它,以便它“等待”您的数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50751048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档