Javascript中的异步性
我对Javascript中的异步性有一个问题。据我所知,Javascript只使用一个线程,但能够异步处理事件 我有以下代码:Javascript中的异步性,javascript,Javascript,我对Javascript中的异步性有一个问题。据我所知,Javascript只使用一个线程,但能够异步处理事件 我有以下代码: game.next(); this.autopilot(); 现在,我需要函数游戏。下一步在调用此函数之前完成。自动驾驶仪函数。Javascript实际上是等到游戏“下一步”完成,还是立即运行“自动驾驶仪” 如果是,回调是否解决了问题 具有回调的下一个函数: Game.prototype.next = function(callback) { // Code
game.next();
this.autopilot();
现在,我需要函数游戏。下一步
在调用此函数之前完成。自动驾驶仪
函数。Javascript实际上是等到游戏“下一步”完成,还是立即运行“自动驾驶仪”
如果是,回调是否解决了问题
具有回调的下一个函数:
Game.prototype.next = function(callback) {
// Code
if(callback !== undefined) {
callback();
}
};
game.next(function() {
this.autopilot();
}.bind(this));
function next() {
Game.x += 1;
}
使用该回调函数的调用函数:
Game.prototype.next = function(callback) {
// Code
if(callback !== undefined) {
callback();
}
};
game.next(function() {
this.autopilot();
}.bind(this));
function next() {
Game.x += 1;
}
是的,您可以使用回调来确保
game.next()
在this.autopilot()之前完成。但是有一个技巧:你不能在任何代码之后粘贴一些回调。是否需要实现回调取决于game.next()
函数是否异步
不需要回调的同步函数示例:
Game.prototype.next = function(callback) {
// Code
if(callback !== undefined) {
callback();
}
};
game.next(function() {
this.autopilot();
}.bind(this));
function next() {
Game.x += 1;
}
需要回调以保留执行顺序的异步函数示例:
function next(callback) {
window.setTimeout(function() {
if(callback !== undefined) { /* etc. */ }
}, 0);
}
在您的代码中,game.next()
必须在调用此.autopilot()之前返回
但是,game.next()
可能会启动一个异步进程(例如Ajax调用),并在进程完成之前返回。如果要将this.autopilot()
的执行推迟到该过程完成,则需要某种回调机制game.next()
必须将回调函数传递给正在进行的异步处理。(正如您在问题中建议的那样,在返回之前执行回调是错误的,因为这也会在异步过程完成之前发生。)好吧,这取决于您的//code
是否执行异步操作,并且您希望该操作“完成”…如果//code
做了一些异步的事情,那么回调
没有帮助,因为异步部分将在回调
之后执行,如果看起来是这样的话。回调需要从异步部分调用。我明白了,所以如果//code
中的所有代码在完全完成后返回,我真的不需要回调吗?它会计算一些东西并遍历调用函数的其他对象的列表,但不会运行异步代码。这样就可以了,同步代码将按您所需的顺序运行。可能最好还是使用vanilla js,使用值为0
的setTimeout
,而不是使用jQuery。