Javascript异步功能
我已经看到了很多异步javascript的函数示例,包括setTimeout、AJAX调用等 显然,这些都有一定的延迟,这意味着脚本的流程会受到影响。但我想知道,如果我有这样的东西怎么办:Javascript异步功能,javascript,jquery,Javascript,Jquery,我已经看到了很多异步javascript的函数示例,包括setTimeout、AJAX调用等 显然,这些都有一定的延迟,这意味着脚本的流程会受到影响。但我想知道,如果我有这样的东西怎么办: function init() { this.initSlider(); this.testLog(); } function initSlider() { // find multiple items and build up a slider instance // f
function init() {
this.initSlider();
this.testLog();
}
function initSlider() {
// find multiple items and build up a slider instance
// for each of these elements.
}
function testLog() {
console.log('test);
}
如果initSlider可能需要很长时间,它会首先运行我的testLog函数吗
我目前对此有点不确定。我知道javascript流上可能有很多例子,但我找不到一个简单函数运行时间更长的例子。这完全取决于initSlider()中的内容。虽然initslider()是一个重函数,不包含任何异步语句 那么testLog()将不会首先执行 Javascript将所有语句存储在callstack中,它们将一个接一个地执行 如果存在asynchronus语句,那么它会将该语句从调用堆栈中删除,并且有可能执行testLog()
所以对于你的问题,我的答案将取决于initSlider()中的代码。Javascript是一种运行单线程的技术。当您使用异步方法(如AJAX或setTimeout)时,javascript引擎会逐个处理这些部分(如果一个人正在等待某件事情,而不是切换到另一个然后返回等等)。您可以通过Node.js看到javascript在异步任务上的强大功能。我想这篇博客很好地理解了Javascript和异步方法:这看起来不是异步的,在我看来是同步的。这本书非常详细地解释了异步的工作原理和应该如何处理:。但是,您的代码段不公开任何异步内容。我们需要更多的细节。什么阻碍了你进行测试?:)一般来说,javascript中的函数不会占用太多时间,因此第二个函数调用不会“等待”,但当然只能在第一个函数“完成”后运行,不管ajax调用如何。@user2521387您的意思是我一直错误地将ajax用于JSON/SignalR/WebApi/REST服务,并且它只用于Javascript到PHP???@Stephan-v它不会“跳过”任何函数。setTimeout说“稍后运行此代码”,ajax调用说“在服务器完成后调用此代码并运行“complete”(etc)代码。那么,什么确切地表示异步语句呢?我认为AJAX和setTimeout就是这样的例子,但是有列表吗?还是我在这里想错了?你的问题是正确的。Asynchronous指的是没有在客户端本地运行的调用。假设您想调用一个ajax调用来登录facebook。所以你没有。你已经问过facebook了,你不确定fb什么时候会给你,所以js让它异步,这样在处理过程中你就可以做其他事情了。没有在客户端运行的任何东西都是异步的。setTimeout强制异步以实现某些目标