【问题标题】:Basic node.js - variable and Mongoose scope基本 node.js - 变量和 Mongoose 范围
【发布时间】:2018-09-28 10:32:42
【问题描述】:

console.log(workingWeekdaysVar) 行;在 findOne 的范围之外,并且变量也在它之外声明,但它给了我 null ...

当我输入 console.log(workingWeekdaysVar);在 findOne 的范围内,它确实提供了正确的输出,但这对我来说没用,因为我想在下面的其他地方使用 workingWeekdaysVar。

注释掉的两行是我尝试做的第二种方法,但它给了我一个不受欢迎的输出,因为整个代码都在一个复杂的 for 循环中。

我怎样才能简单地将 workingWeekdaysVar 的获取值传递到范围之外?

    var workingWeekdaysVar = [];

                    buyerSupplierFisModel.findOne(filter).then(function (combo) {

                        workingWeekdaysVar = combo.workingWeekdays;

                         //server.getWorkingWeekdays = function () { return combo.workingWeekdays };

                    });

   console.log(workingWeekdaysVar);

//console.log(server.getWorkingWeekdays());

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    findOne() 是一个异步函数(它返回一个 promise 对象)。这意味着它会立即返回并运行您的下一个代码行(在本例中为console.log(workingWeekdaysVar);。但是,由于该函数尚未完成,workingWeekdaysVar 为空,并且在findOne() 完成之前它将为空它的工作并在提供的链式回调.then(function (combo) {... 中返回结果。

    所以如果你想对结果做任何事情,你必须在回调中做。一种选择是使用async / await:

    (async () => {
        try {
            const { workingWeekdaysVar } = await buyerSupplierFisModel.findOne(filter)
            console.log(workingWeekdaysVar)
        } catch (e) {
            console.log(`Error: ${e}`);
        }
    })()
    

    【讨论】:

      【解决方案2】:

      重新安排一下你的代码:

      let doToResponse = (combo)=>{
       workingWeekdaysVar = combo.workingWeekdays; 
       console.log(workingWeekdaysVar);
      }
       buyerSupplierFisModel.findOne(filter).then(function (combo) {
                              doToResponse(combo)
                          });
      
      • 有利于重用性

      我个人最喜欢的:

      buyerSupplierFisModel.findOne(filter).then(combo=> {
          workingWeekdaysVar = combo.workingWeekdays; 
          console.log(workingWeekdaysVar);
      });
      

      重要的是要记住,正如 Miguel Calderón 所说.. findOne - 返回一个承诺。那时你有另一个具有不同本地(词法?)范围的线程

      【讨论】:

        猜你喜欢
        • 2013-11-19
        • 1970-01-01
        • 2019-02-22
        • 1970-01-01
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多