这种在节点js中执行代码的方式吗?

时间:2017-12-02 21:07:28

标签: javascript node.js coding-style

好吧,我是节点js的新手。我想知道我的编码结构。我问这个问题是因为我写了很多回报,而且我看起来很奇怪

setTimeout(() => {
     return _db.collection(_encycUsers).findOne(
     // search basis.
      {"_id" : require("mongodb").ObjectId(_userId)}).then(
      // on a successful search.
       (_encycUsersData) => {
         // if return is not empty.
         if(!(_help.isEmpty(_encycUsersData))) {
           return _db.collection(_encycUsers).updateOne(
            // search basis.
            {"_id" : require("mongodb").ObjectId(_encycUsersData["_id"])}, {
             "$unset" : {"_otp" : _otp, "_state" : ["request.otp.sent", "request.otp.delete"]},
             "$set" : {"_state" : "request.otp.reSent"}
            }).then(
               // on successful encyc update.
                () => {
                       _debug(_encycUsersData);
                       // search user after successful otp delete.
                       return _db.collection(_encycUsers).findOne(
                       // search basis.
                        {"_id": require("mongodb").ObjectId(_encycUsersData["_id"])}).then(
                          // on successful user search.
                             (_encycUsersFindData) => {
                             ...

1 个答案:

答案 0 :(得分:0)

您的退货声明似乎毫无用处。 在

setTimeout(function, timeout)

该函数的返回值基本上被忽略。 在您的代码中,您的函数返回并不重要。有趣的是,你调用的查找和更新方法返回promises,你在这些promise上调用then方法。

因此,删除return语句并以

之类的代码结束
setTimeout(() => {
    function1().then((result) => {
        function2(something_based_on_result).then((result2 => {...})
    })}, 1000)

是一种常见的Javascript实践。 有多种方法可以减少这些链的长度。 如果您使用的是大于7.6的节点,则可以使用异步函数并编写如下内容:

async function foo(){
    let result = await function_returning_promise() #calls then on the promise under the covers
    let result2 = await function2(data_based_on_result)
}

在几年内,异步模式将非常普遍。今天,连锁系列往往是人们写的。