标签: jquery-deferred

jQuery延迟和承诺 - .then()vs .done()

我一直在阅读jQuery延迟和承诺,我看不出使用.then()&.done()成功回调之间的区别.我知道Eric Hynds提到.done().success()映射到相同的功能,但我猜是这样做的,.then()因为所有的回调都是在成功操作完成时调用的.

任何人都可以请你告诉我正确的用法?

jquery promise jquery-deferred

458
推荐指数
7
解决办法
25万
查看次数

将Deferred数组传递给$ .when()

这是一个人为的例子:http://jsfiddle.net/adamjford/YNGcm/20/

HTML:

<a href="#">Click me!</a>
<div></div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

function getSomeDeferredStuff() {
    var deferreds = [];

    var i = 1;
    for (i = 1; i <= 10; i++) {
        var count = i;

        deferreds.push(
        $.post('/echo/html/', {
            html: "<p>Task #" + count + " complete.",
            delay: count
        }).success(function(data) {
            $("div").append(data);
        }));
    }

    return deferreds;
}

$(function() {
    $("a").click(function() {
        var deferreds = getSomeDeferredStuff();

        $.when(deferreds).done(function() {
            $("div").append("<p>All done!</p>");
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

我想要"全部完成!" 在所有延迟任务完成后$.when()出现,但似乎不知道如何处理Deferred对象数组."全部完成!" 首先发生的是因为数组不是Deferred对象,所以jQuery继续并假设它刚刚完成.

我知道可以将对象传递给函数,$.when(deferred1, deferred2, ..., deferredX) …

javascript jquery argument-passing jquery-deferred .when

439
推荐指数
6
解决办法
11万
查看次数

如何使用jQuery延迟?

jQuery 1.5带来了新的Deferred对象和附加的方法.when,.Deferred以及._Deferred.

对于那些谁没有带使用.Deferred之前,我已经注释的源

这些新方法有哪些可能的用法,我们如何将它们融入模式?

我已经阅读了API源代码,所以我知道它的作用.我的问题是我们如何在日常代码中使用这些新功能?

我有一个缓冲类的简单示例,它按顺序调用AJAX请求.(下一个在上一个完成后开始).

/* Class: Buffer
 *  methods: append
 *
 *  Constructor: takes a function which will be the task handler to be called
 *
 *  .append appends a task to the buffer. Buffer will only call a task when the 
 *  previous task has finished
 */
var Buffer = function(handler) {
    var tasks = [];
    // empty resolved deferred object
    var …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-deferred

278
推荐指数
7
解决办法
13万
查看次数

你如何使用一组jQuery Deferreds?

我有一个应用程序需要按特定顺序加载数据:根URL,然后是模式,然后最终使用各种数据对象的模式和URL初始化应用程序.当用户导航应用程序时,将加载数据对象,根据模式进行验证并显示.当用户CRUD数据时,模式提供首次通过验证.

我在初始化时遇到问题.我使用Ajax调用来获取根对象$ .when(),然后创建一个promises数组,每个模式对象一个.这样可行.我在控制台中看到了fetch.

然后我看到所有模式的获取,因此每个$ .ajax()调用都有效.fetchschemas()确实返回了一个promises数组.

但是,最终when()子句永远不会触发,并且"DONE"字样永远不会出现在控制台上.jquery-1.5的源代码似乎暗示"null"可以作为传递给$ .when.apply()的对象,因为when()将构建一个内部Deferred()对象来管理列表,如果没有对象是传入

这使用Futures.js.如果不是这样的话,应如何管理jQuery Deferreds数组呢?

    var fetch_schemas, fetch_root;

    fetch_schemas = function(schema_urls) {
        var fetch_one = function(url) {
            return $.ajax({
                url: url,
                data: {},
                contentType: "application/json; charset=utf-8",
                dataType: "json"
            });
        };

        return $.map(schema_urls, fetch_one);
    };

    fetch_root = function() {
        return $.ajax({
            url: BASE_URL,
            data: {},
            contentType: "application/json; charset=utf-8",
            dataType: "json"
        });
    };

    $.when(fetch_root()).then(function(data) {
        var promises = fetch_schemas(data.schema_urls);
        $.when.apply(null, promises).then(function(schemas) {
            console.log("DONE", this, schemas);
        });
    });
Run Code Online (Sandbox Code Playgroud)

jquery jquery-deferred .when

132
推荐指数
3
解决办法
6万
查看次数

什么是延期对象?

jQuery 1.5添加了"Deferred Objects".他们是什么,他们究竟做了什么?

jquery jquery-deferred

120
推荐指数
3
解决办法
5万
查看次数

$ .ajax的成功和.done()方法有什么区别

谁能帮我?
我无法理解之间的区别success.done()$.ajax.

如果可能请举例.

jquery jquery-deferred

98
推荐指数
3
解决办法
10万
查看次数

我何时应该使用jQuery deferred的"then"方法,何时应该使用"pipe"方法?

jQuery Deferred有两个函数可用于实现函数的异步链接:

then()

deferred.then( doneCallbacks, failCallbacks ) Returns: Deferred

doneCallbacks解析Deferred时调用的函数或函数数组.
failCallbacks拒绝延迟时调用的函数或函数数组.

pipe()

deferred.pipe( [doneFilter] [, failFilter] ) Returns: Promise

doneFilter解析Deferred时调用的可选函数.
failFilter拒绝Deferred时调用的可选函数.

我知道then()已经存在了一段时间,pipe()因此后者必须增加一些额外的好处,但正是这种差异恰恰在于我.两者都采用了几乎相同的回调参数,尽管它们的名称不同,返回a Deferred和返回a 之间的区别Promise似乎很小.

我已经一遍又一遍地阅读官方文档,但总是发现它们太"密集"而无法真正地包围我的搜索已经找到了很多关于这个或另一个特征的讨论,但我没有发现任何真正澄清不同的东西每个人的利弊.

那么什么时候使用then它更好,pipe什么时候使用更好?


加成

Felix的出色答案确实有助于阐明这两个功能的区别.但我想知道是否有时候功能性then()比那更好pipe().

很明显,它pipe()then()以前更强大,似乎前者可以做后者可以做的任何事情.使用的一个原因then()可能是它的名称反映了它作为处理相同数据的一系列函数的终止的作用.

但是有一个用例需要then()返回由于它返回一个新的而Deferred无法完成的原始文件吗?pipe()Promise

jquery asynchronous decoupling jquery-chaining jquery-deferred

96
推荐指数
3
解决办法
4万
查看次数

Reactjs组件的异步呈现

我想在完成ajax请求后渲染我的组件.

您可以在下面看到我的代码

var CategoriesSetup = React.createClass({

    render: function(){
        var rows = [];
        $.get('http://foobar.io/api/v1/listings/categories/').done(function (data) {
            $.each(data, function(index, element){
                rows.push(<OptionRow obj={element} />);
            });
           return (<Input type='select'>{rows}</Input>)

        })

    }
});
Run Code Online (Sandbox Code Playgroud)

但我得到下面的错误,因为我在我的ajax请求的done方法内返回渲染.

Uncaught Error: Invariant Violation: CategoriesSetup.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object.

有没有办法在开始渲染之前等待我的ajax请求结束?

javascript ajax asynchronous jquery-deferred reactjs

77
推荐指数
2
解决办法
6万
查看次数

推迟与承诺

除了jQuery版本之外,Deferred和Promise有什么区别?

我应该用什么来满足我的需求?我只想打电话给fooExecute().例如,我只需要fooStart()fooEnd()切换html div状态.

//I'm using jQuery v2.0.0
function fooStart() { /* Start Notification */ }
function fooEnd() { /* End Notification */ }
function fooExecute() { /* Execute the scripts */ }

$('#button1').on('click', function() {
    var deferred1 = $.Deferred();
    var promise1 = $.Promise();

    deferred1.???

    promise1.???
});
Run Code Online (Sandbox Code Playgroud)

jquery promise jquery-deferred

74
推荐指数
1
解决办法
3万
查看次数

jquery的promise方法如何真正起作用?

我真的不明白是什么delegatepromise有.

根据文件 -

  • delegate 将选择器和事件绑定到某种包装容器,以后可以在以后再次使用当前和未来的项目.
  • promise()如果所有新加载的匹配,它会重新映射到第一个有限的东西.也许我真的不明白这种承诺方法.

如果包装器仍然存在,但包装容器中的内容已更改,和/或通过Ajax?重新加载怎么办?为什么事件不会像第一次绑定那样触发或工作?

是的,我去过文档页面,我完全不理解他们的解释.

ajax jquery jquery-deferred

62
推荐指数
1
解决办法
4万
查看次数