【问题标题】:JavaScript / node.js getting data out of modelJavaScript / node.js 从模型中获取数据
【发布时间】:2012-08-14 09:05:30
【问题描述】:

我 100% 肯定肯定有一些简单的答案,但今天我在谷歌上搜索很烂。代码中的问题。

async.waterfall([
  function(callback){
    callback(null, 'some value..');
  }
  ],
  function (err, result) {
    // how do I get result outside of this block?
   }
);

如果我在这个块之外设置一个变量并尝试将“结果”分配给它,由于 JavaScript 作用域的性质,它不会脱离该块..

谢谢!

【问题讨论】:

  • 您能澄清一下“分配”给result 的原因吗?我假设您的意思是 async.waterfall 内的东西,是吗?
  • 我怀疑您是在 waterfall 调用之后尝试访问该变量,这意味着问题恰恰在于异步概念。您能否详细说明您在哪里访问外部变量?
  • result = 'some value..' 在这种情况下。它通过回调分配。我想做的是:在 async.waterfall 之前设置一些数据,在瀑布内部执行一系列操作(所有外部变量都可以在内部访问),以某种方式进一步传递结果,但我不确定如何。理想情况下,我想设置一个对象,在瀑布内使用该对象,同时不断更新其属性,并在我们离开瀑布时保留更改。接受的解决方法...
  • 我认为我们需要更多的代码......你在这里使用特定的 npm 包吗?
  • 一旦你输入了异步代码,你就必须呆在那里——除了从瀑布的回调中调用其他函数之外,没有“离开瀑布”的概念。但是,您可以在输入异步代码之前对创建的对象进行修改,但是您仍然必须确保在瀑布完成后通过使用代码或从回调中调用函数来访问它(除非正在修改的对象被视为全局对象)。

标签: javascript node.js closures


【解决方案1】:

感谢大家的回答。我所做的 - 我已经切换到一个名为“step”的模块。它让我可以执行以下操作:

step = require('step');

var responseData = '{"a":1, "b":2}';

step(
  function someFunction1 () {
    // We do something here and return the result
    return '3';
  },
  function someFunction2 (err, result) {
    // We try to modify the variable that has been defined outside this block
    responseData.c = result;
  }
);

// responseData now returns {"a":1, "b":2, "c":3}

也许我也可以用 async 做这样的事情——我不知道。但是上面的方法正是我想要的。

【讨论】:

    猜你喜欢
    • 2016-10-20
    • 2017-06-14
    • 2017-06-14
    • 2014-05-25
    • 2020-09-19
    • 1970-01-01
    • 2013-12-26
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多