【发布时间】:2018-10-18 08:23:32
【问题描述】:
没有承诺,没有异步等我想知道这种模式是否可以接受 - 我的函数被调用并且我被传递了一个回调。我需要做两件事才能回电:
function doSomething(..args.., callbackThatNeeds1And2DoneFirst){
var done1 = false;
var res1 = someAsync1(function call1callback(){
//blah
done1 = true;
maybeComplete();
});
var done2 = false;
var res2 = someAsync2(function call2callback(){
//blah
done2 = true;
maybeComplete();
});
function maybeComplete(){
if(done1 && done2){
callbackThatNeeds1And2DoneFirst();
}
}
}
我想问题是关于变量范围的 - 多个“并发”执行是否会相互干扰 done1 和 done2 的值,还是每个调用都有自己的变量范围?
【问题讨论】:
-
除非我在这段代码中遗漏了一些东西,否则当您测试 done1 和 done2 时,由于异步调用,您肯定不会设置任何这些变量。
-
你是对的,谢谢!已编辑..
-
这应该可以。但是在这里,您让“本地”回调意识到他们不应该知道的更普遍的问题 (
maybeComplete)。这在一些狭窄的情况下是可以接受的,但这不适用于应用范围。如果本地回调函数来自可能无法访问的其他地方怎么办? -
我在想 MaybeComplete 将在被调用的函数范围内(请参阅进一步编辑),但我没有做很多节点/js,所以我不太了解范围/您所指的距离
-
这可能会起作用,但您最好创建一个简单的队列,始终将您的回调作为最终条目。每个函数都会接受一个
next参数,该参数将在其运行结束时被调用。首先填充您的队列,然后触发其中的第一个函数。
标签: javascript node.js scope asynccallback