从async.waterfall分配全局变量



如何将值分配给async.waterfall中位于setTimeout内部的全局变量?

这是我代码的一部分:

var theVar = null;
setTimeout(function () {
 async.waterfall([
      function (next) {
        var thedata = 1;
        next(null,thedata);
      },
      function (thedata,next) {
        if (thedata === 1) {
            theVar = 2;
        }
        theVar = 3;
        next();
 ], function (err, result) {
 });
}, theVar * 1000); //theVar is timeout here.

所以,基本上,我想从async.waterfall中设置全局变量。然后,该变量theVar将是setTimeout中的超时。现在theVar总是null

你不能。

抛开异步调用返回的常见问题不谈…

你正试图在这里进行一些相当严肃的时间旅行。

X秒后,您将启动一个异步函数。在那之后的某个时刻,你会从中得到一个值。只有这样,你才会知道X应该是什么。

这是不可能的(由于一般因果关系的限制,而不是专门编程)。


可能的情况是:

  1. 存储当前时间
  2. 启动异步函数
  3. 当您从该函数获得结果时,使用它来确定间隔
  4. 从间隔中减去"现在"和存储时间之间的差值
  5. 设置超时以使用计算的时间执行其他操作

当然,由于您无法预测步骤2和3之间的时间,因此您在步骤4中得到的值可能为负数(即,在等待异步计算完成时,您想要运行函数的时间已经过去)。

相关内容

  • 没有找到相关文章

最新更新