当前位置:数码通 > 电脑

javascript 异步同步

来源于 数码通 2023-10-06 10:32
在前端开发中,我们经常会接触JavaScript。 JavaScript是一种基于事件驱动和异步编程的语言,因此学习异步和同步编程很重要。本文将介绍 JavaScript 中的异步和同步编程,并通过一些生动的例子解释它们是如何工作的。 1.什么是同步编程? 同步编程是指当我们调用一个函数时,程序会等待该函数完成后再执行下一个函数。这意味着程序按顺序一件一件地执行代码。例如,我们有一个函数 add() 来计算两个数字的和。当我们调用add()函数时,程序必须等待add()函数完成计算才能执行下一条语句。
函数添加(a,b){
返回a+b;
}
var sum = add(2, 3);
console.log(sum);
上面的代码中,当调用add()函数计算2+3时,程序会等待add()函数执行完毕,然后输出结果5。 2.什么是异步编程? 异步编程是指当我们调用一个函数时,程序会立即执行下一个函数,而不需要等待该函数完成。这意味着该程序可以同时执行多个任务。例如,我们可能有一个函数 cssAnimate() 来执行 CSS 动画。当我们调用cssAnimate()函数执行动画时,程序不会等待动画完成才继续执行下一条语句。
function cssAnimate(元素,属性,持续时间,缓动){
// 执行CSS动画
}
cssAnimate("#myDiv", {顶部: "100px", 左边: "200px"}, 2000, "线性");
console.log("动画开始");
上面的代码中,调用了cssAnimate()函数来立即开始动画。程序继续执行下一条语句console.log()并输出文本“Animation started”。 3. 异步编程的使用场景 异步编程主要用于需要长时间执行但不需要立即返回结果的场景,例如: 1.ajax请求当我们使用Ajax请求获取数据时,我们需要从服务器获取数据,这可能需要几秒甚至更长时间。在等待获取数据的同时,页面可以继续显示其他内容。因此我们使用异步编程来处理Ajax请求。
var xhr = new XMLHttpRequest();
m.smtshopping.cn('GET', '/url', true);
xhr.onreadystatechange = 函数() {
if(xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
}
};
xhr.send(null);
上面的代码中,当我们发送Ajax请求时,程序不会停止,而是专注于用户交互等任务,直到请求完成,此时回调中的代码函数将被执行。 。 2. 事件处理 当我们处理用户交互事件时,比如鼠标点击事件或者键盘按下事件,这些事件通常是在程序执行过程中触发的。因此,我们使用异步编程来处理这些事件。
document.querySelector("#myButton").addEventListener("click", function() {
console.log("按钮被点击");
});
console.log("事件监听器已添加");
上面的代码中,当我们给DOM元素添加事件监听器时,程序不会等待事件发生才执行回调函数,而是会继续执行执行下一条语句console.log(),输出文本“Event Listener linkeded”。 4.通过回调函数进行异步编程 Javascript 使用回调函数来实现异步编程。回调函数是异步操作完成时调用的函数。例如,我们可以使用回调函数来处理Ajax请求。
函数 getData(回调) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = 函数 () {
if (xhr.readyState == xhr.DONE) {
回调(xhr.responseText);
}
};m.smtshopping.cn("GET", "data.json", true);
xhr.send();
 }
 获取数据(函数(数据){
控制台.log(数据);
});
上面的代码中,我们定义了一个getData()函数来发送Ajax请求,请求数据后调用回调函数。参数是服务器返回的数据。通过回调函数,我们可以处理异步操作的结果。 5.通过Promise进行异步编程 Promise 是异步编程中的一个重要概念。 Promise 是一个表示异步任务最终完成或失败的对象。它可以让我们更方便的处理异步操作,同时避免回调地狱的问题。 以下是 Promise 的示例:
function getData() {
返回新的 Promise(函数(解决, 拒绝) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = 函数() {
if(xhr.readyState === 4) {
if(xhr.status >= 200 && xhr.status< 300) {
解决(xhr.responseText);
} 别的 {
拒绝(xhr.status);
}
}
};
m.smtshopping.cn("GET", "/data.json");
xhr.send();
});
}
getData().then(函数(数据) {
控制台.log(数据);
}).catch(函数(错误){
控制台.错误(错误);
});
上面的代码中,定义了一个getData()函数来发送Ajax请求并返回一个Promise对象。我们可以使用 .then() 方法来访问异步操作的结果,并且可以使用 .catch() 方法来处理异步操作中的错误。 Promise 可以让我们更优雅地处理异步操作,避免回调地狱。 六、总结在本文中,我们讨论了 JavaScript 中的异步和同步编程。同步编程在一个函数执行完成后才会执行下一个函数,而异步编程则可以不等待该函数执行完成就执行下一个函数。异步编程广泛用于处理需要长时间执行但不需要立即返回结果的场景。 JavaScript 使用回调函数和 Promise 来实现异步编程。回调函数是异步操作完成时调用的函数。 Promise 是异步任务最终完成或失败的对象。它可以让我们更方便的处理异步操作。了解异步和同步编程是前端开发的基础。它可以帮助我们更好地理解JavaScript,提高开发效率。
登录后参与评论