jquery中done和then的区别(详解)

jQuery中done和then的区别(详解)

在使用jQuery的过程中,可能会遇到使用done()then()的情况。这两个方法在执行完成回调时看起来非常相似、可以互换,但它们之间却有一些细微的区别。

done()

done()方法是用来将一个成功的回调函数附加到一个已完成的异步操作上。它返回一个promise对象来处理异步操作的结果。当异步操作成功之后,回调函数会被执行。

下面是一个使用done()方法的示例:

$.ajax({
  url: 'https://jsonplaceholder.typicode.com/todos/1',
  method: 'GET',
}).done(function(response) {
  console.log('Title:', response.title);
}).fail(function(jqXHR, textStatus) {
  console.error('Error:', textStatus);
});

在上面的代码中,当AJAX请求成功时,回调函数会被触发,函数里会打印出返回数据里的标题。

then()

then()方法和done()方法类似,用来附加一个回调函数到一个异步操作上。但是和done()不同的是,then()方法可以接受两个回调函数作为参数:成功回调和失败回调。当异步操作完成时,若成功,则执行成功回调,否则执行失败回调。

以下是一个使用then()方法的示例:

$.ajax({
  url: 'https://jsonplaceholder.typicode.com/todos/1',
  method: 'GET'
}).then(function(response) {
  console.log('Title:', response.title);
}, function(jqXHR, textStatus) {
  console.error('Error:', textStatus);
});

在上面的代码中,如果AJAX请求成功,则会执行第一个回调函数,并打印标题。如果AJAX请求失败,则会执行第二个回调函数并打印错误信息。

区别

虽然done()then()功能非常相似,但它们之间有一些微小的区别:

  1. 返回值不同: done()返回一个新的、已完成的promise对象,而then()方法返回一个新的promise对象,可以通过它来进行链式操作。

  2. 参数不同: done()方法只接受一个参数,即成功的回调函数; 而then()方法接受两个参数,即成功回调和失败回调。

  3. 异常传递不同: 在使用done()方法时,如果在成功的回调函数中抛出异常,它将不会被传递到链式操作中。而在then()方法中,如果在成功回调函数中抛出异常,它会被传递到链式操作中的下一个then()方法或者最后的catch()方法。

示例

使用done()方法

$.ajax({
  url: 'https://jsonplaceholder.typicode.com/todos/1',
  method: 'GET'
}).done(function(response) {
  console.log('Title:', response.title);
  throw new Error('test');
}).done(function() {
  console.log('Maybe this code will not be executed'); // 不会执行
}).fail(function(jqXHR, textStatus) {
  console.error('Error:', textStatus);
});

在上面的代码中,虽然在第一个done()方法中抛出了一个异常,但是它不会被后面的回调函数捕获,所以第二个done()方法不会被执行。

使用then()方法

$.ajax({
  url: 'https://jsonplaceholder.typicode.com/todos/1',
  method: 'GET'
}).then(function(response) {
  console.log('Title:', response.title);
  throw new Error('test');
}).then(function() {
  console.log('Maybe this code will not be executed'); // 不会执行
}).catch(function(error) {
  console.error('Error:', error.message); // "test"
});

在上面的代码中,当在第一个then()方法中抛出异常时,它会被后面的catch()方法捕获。因此,第二个then()方法不会被执行。

总的来说,done()方法和then()方法在处理异步操作成功后的回调函数上非常相似,但在使用时还是需要注意它们之间的区别。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery中done和then的区别(详解) - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jQuery UI Tooltip类选项

    jQuery UI Tooltip类选项攻略 jQuery UI的Tooltip组件是一个强大的JavaScript库,它提供了许多选项和功能,以便在鼠标悬停在元素上时显示提示信息。以下是详细攻略,含两个示例,演示如何使用Tooltip类选项: 步骤1:引入库 在使用之前,需要先在中引入jQuery库和jQuery UI库。可以通过以下方式引入: <l…

    jquery 2023年5月9日
    00
  • jquery.cookie.js的介绍与使用方法

    下面我来为你介绍“jquery.cookie.js的介绍与使用方法”的完整攻略。 什么是jquery.cookie.js jquery.cookie.js是一个基于jQuery的、用于访问和操作cookies的插件。通过使用该插件,我们能够简单快捷地获取或设置cookie,并且不需要考虑浏览器之间的兼容性问题。 如何使用jquery.cookie.js 要使…

    jquery 2023年5月28日
    00
  • jQuery实现数秒后自动提交form的方法

    jQuery实现数秒后自动提交form的方法 简介 有时候我们需要在网页中自动提交form表单,而且需要等待一定时间后再提交,这个时候就需要用到jQuery的定时器来实现了。本文将详细介绍如何使用jQuery实现数秒后自动提交form的方法。 步骤 1. 编写HTML代码 首先我们需要在HTML中创建一个form表单并且给它设置一个id,如下所示: <…

    jquery 2023年5月28日
    00
  • 如何使用jQuery在一个元素上应用样式

    jQuery是一个流行的JavaScript库,它提供了许多实用的功能,包括在一个元素上应用样式。在本攻略中,我们将详细介绍如何使用jQuery在一个元素上应用样,并提供两个示例来说明它们的用途。 使用css()方法 jQuery的css()方法用于在一个元素上设置CSS属性。它接受一个包含CSS属性和值的对象作为参数,并将这些属性和值用于元素。 以下是一个…

    jquery 2023年5月9日
    00
  • Jquery高级应用Deferred对象原理及使用实例

    Jquery高级应用Deferred对象原理及使用实例 什么是Deferred对象 在jQuery1.5版本中新增了一个Deferred对象,它是jQuery中推崇的异步编程解决方案之一。Deferred对象为异步编程提供了一种可靠的状态和普遍存在的逐级响应处理方式,它可以在多个回调函数之间传递用于异步处理的操作和结果。 一个Deferred对象具有3个状态…

    jquery 2023年5月28日
    00
  • jQuery Lightbox 图片展示插件使用说明

    jQuery Lightbox 图片展示插件使用说明 简介 jQuery Lightbox是一款轻量级的开源图片展示插件,可以快速方便地实现制作图片画廊、幻灯片轮播等功能。该插件使用了很多jQuery动画效果,能给用户带来流畅的图片展示体验。 安装 从官网下载 从jQuery Lightbox的官网下载插件。下载完成后,将 lightbox.min.js 和…

    jquery 2023年5月27日
    00
  • jQuery中on绑定事件后引发的事件冒泡问题如何解决

    针对jQuery中on绑定事件后引发的事件冒泡问题,解决方式有以下两种: 1. 使用stopPropagation()方法阻止冒泡 首先介绍的是最为常见的解决方式,即使用stopPropagation()方法阻止事件冒泡。 当在一个父级元素上使用on()方法绑定子元素的事件时,子元素触发的事件会一直冒泡到父级元素,甚至最终冒泡到document元素,影响页面…

    jquery 2023年5月18日
    00
  • 基于jquery步骤进度条源码分享

    关于“基于jquery步骤进度条源码分享”的完整攻略,我将从以下几个方面进行讲解: 一、什么是jquery步骤进度条? jquery步骤进度条是一款基于jquery实现的进度条效果,可以用于展示多个步骤的进度,并且可以根据用户不断地操作和反馈自动更新进度。 该进度条的实现方式,在页面上使用一个容器元素,通过不断向该容器增加或删除进度节点来控制进度条的前进或后…

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部