Adr*_*det 3 javascript asynchronous
这里我有两个 JS 异步函数同时运行。
当一个结束时(回调已经运行),我想阻止另一个继续。但是(这是我的问题)我不能使用 global vars。然后,我想知道是否可以停止 JS 中的挂起函数或以任何方式解决我的问题。
我将不胜感激任何答案:)
编辑:
一些澄清:
关于代码,这是我想要生成的示例:
asyncFirst(
// ... args
function() { // callback
console.log('foo');
stopOther();
}
);
asyncSecond(
// ... args
function() { // callback
console.log('bar');
stopOther();
}
);
asyncFirst(...);
asyncSecond(...);
Run Code Online (Sandbox Code Playgroud)
不使用“状态”变量的 stopOther() 算法是什么?
如果这些函数在同一范围内运行,您可以简单地设置一个标志变量并将其用作每个回调结束时的保护:
var flag = false;
function async1() {
//check if other function is done
if (!flag) {
//do stuff
}
flag = true;
}
function async2() {
//same structure as the first
}
Run Code Online (Sandbox Code Playgroud)
如果这些在全局范围内运行,您将需要使用 Paul S. 的 IIFE 建议
(function() {
var flag = false;
function async1() {
//check if other function is done, if it is don't bother
if (!flag) {
//do stuff
}
flag = true;
}
function async2() {
//ditto
}
})();
Run Code Online (Sandbox Code Playgroud)
这将防止污染全局命名空间。请注意,javascript这里是单线程对您有帮助,因为这两个函数不能完全同时命中标志,因此只有其中一个会实际进行更改。另请注意, async1 && 2 不需要在同一范围内定义,但flag必须存在于调用它们的范围内。
不幸的是,如果不使用“state”变量,就无法停止异步运行的方法。一旦调用,方法就无法停止,即使使用非常“低级”的 JS 方法也是如此。
对于“state”变量,请检查 Jared Smith 的答案。
| 归档时间: |
|
| 查看次数: |
16302 次 |
| 最近记录: |