`

三十一、为function创建deferred

 
阅读更多

function wait() {
    //setTimeout是异步,如果需要保证可以进行同步操作
    //需要通过promise来操作,通过$.Deferred对象的.promise()方法可以获取promised对象
    var def = $.Deferred();
    setTimeout(function(){
        alert("invoke");
        //通过调用def的resolve来指定函数已经执行完成
        //执行成功使用resolve,执行失败使用reject来指定
        //def.resolve("abc");
        //第一个参数是上下文对象
        def.rejectWith($("div"),["ok"]);
    },3000)
   
    return def.promise();
}
wait().done(function(value){
    alert("success:"+value);
}).fail(function(value){
    //默认情况this是指向这个函数的对象,如果希望获取相应的上下文做this
    //可以在调用的时候通过def.rejectWith("上下文对象")
    alert(this.append("abc"));
    alert("fail:"+value[0])
});

//还是这个先执行
alert("yy");

分享到:
评论

相关推荐

    谈谈jQuery之Deferred源码剖析

    1. **$.Deferred()**:这是创建Deferred对象的方法。在jQuery1.8版本之后,通过`then()`方法会返回一个新的受限制的deferred对象,即`deferred.promise()`,使得可以进一步链式调用。 2. **resolve()**:当异步操作...

    Deferred

    在jQuery中,`$.Deferred()`是一个工厂函数,用于创建Deferred对象。这个对象拥有两个关键状态:pending(等待)和resolved(已完成)或rejected(已失败)。它的主要目的是管理和协调异步操作,通过链式调用来跟踪...

    jQuery中的deferred对象和extend方法详解

    1. **$.Deferred()**:创建一个新的deferred对象。 2. **deferred.done()**:当deferred对象的状态变为“已完成”时,调用指定的回调函数。 3. **deferred.fail()**:当deferred对象的状态变为“已失败”时,调用...

    jQuery中的deferred使用方法

    首先创建一个`deferred`对象,然后在函数内部根据情况调用`resolve()`或`reject()`: ```javascript var defer = $.deferred(); var wait = function(defer) { var tasks = function() { console.log('执行完毕!...

    深入解析jQuery中Deferred的deferred.promise()方法

    总的来说,`deferred.promise()` 提供了一种安全的机制,用于将异步操作的控制权交给创建者,同时让使用者只能观察和响应状态变化,而不能影响操作的执行流程。这种设计在复杂的异步编程中,能够显著提高代码的可...

    jQuery.deferred对象使用详解

    创建一个deferred对象很简单,只需要通过$.Deferred()函数即可。例如: ```javascript var deferred = $.Deferred(); ``` 这个deferred对象可以被用来控制异步操作的状态,包括pending(等待中)、resolved(已解决...

    详解jQuery中的deferred对象的使用(一)

    jQuery的`deferred`对象是实现异步操作的一种手段,它是对Promise/A+规范的早期实现。在jQuery 1.5及以后的版本中,`deferred`对象被引入,作为处理异步操作回调的一种更优雅的方式。 `deferred`对象的核心在于它...

    jQuery Deferred和Promise创建响应式应用程序详细介绍

    JavaScript中的`Deferred`和`Promise`是用于处理异步操作的重要工具,特别是在创建响应式应用程序时。`Deferred`对象由jQuery引入,而`Promise`则是ES6标准的一部分,两者密切相关,但有一些区别。 首先,`Deferred...

    jQuery中的Deferred和promise 的区别

    例如,你可能需要在某些条件满足后才决议或拒绝一个Promise,这时你可以创建一个Deferred对象: ```javascript var deferred = $.Deferred(); $.ajax({url: "/myServerScript"}).done(deferred.resolve).fail...

    jQuery中deferred对象使用方法详解

    它可以处于三种状态之一:未完成(pending)、已完成(resolved)和已拒绝(rejected)。在异步操作成功完成时,它会被设置为已完成状态,而失败则会设置为已拒绝状态。 使用deferred对象的优势在于,它提供了一种...

    jQuery中借助deferred来请求及判断AJAX加载的实例讲解

    `getData`函数创建了一个`deferred`对象,并在AJAX请求成功后通过`deferred.resolve(data)`解决这个`deferred`。返回的是`deferred.promise()`,这样在调用`recycleData`时,可以通过`.when(getData(i)).done...

    deferred:简单推迟到nodejs

    1. 创建Deferred对象: ```javascript var Q = require('q'); // 引入Q库,它提供了Deferred的实现 var deferred = Q.defer(); ``` 2. 使用`resolve`和`reject`: 当异步操作成功时,调用`deferred.resolve...

    认识jQuery的Promise的具体使用方法

    在jQuery中创建Deferred对象时,我们并没有像创建ES6的Promise对象那样传入一个执行器函数。而且,Deferred对象允许我们直接调用`resolve`方法,这给了我们修改其状态的能力,这在某些情况下可能造成问题。为了解决...

    qryq:qryq是一个NodeJs库,它允许一个人表达一系列查询并以并行,顺序或有向无环图的形式定义它们之间的依赖关系

    qryq qryq是NodeJs库,它允许一个人将有向查询的任意集合表达和运行为有向无环图。 它的名称源自“查询队列”。添加到您的项目npm install qryq --save 在项目中使用它: var qryq = require('qryq'); 用法创建一个...

    Jquery高级应用Deferred对象原理及使用实例

    在这个例子中,`first()` 函数返回一个由 `$.Deferred()` 创建的 `Promise`,在异步操作(模拟延迟)完成后调用 `defer.resolve()` 来改变 `Promise` 的状态。然后 `second()` 函数作为 `then()` 方法的参数,会在 `...

    以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题

    以加载图片为例,我们可以创建一个`loadImg`函数,该函数内部使用$.Deferred来封装异步的图片加载过程: ```javascript var loadImg = function(url) { var img = new Image(), deferred = $.Deferred(); img.src...

Global site tag (gtag.js) - Google Analytics