如何将值分配给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应该是什么。
这是不可能的(由于一般因果关系的限制,而不是专门编程)。
可能的情况是:
- 存储当前时间
- 启动异步函数
- 当您从该函数获得结果时,使用它来确定间隔
- 从间隔中减去"现在"和存储时间之间的差值
- 设置超时以使用计算的时间执行其他操作
当然,由于您无法预测步骤2和3之间的时间,因此您在步骤4中得到的值可能为负数(即,在等待异步计算完成时,您想要运行函数的时间已经过去)。