jquery – 了解Deferred.pipe()

前端之家收集整理的这篇文章主要介绍了jquery – 了解Deferred.pipe()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在阅读关于jQuery的延迟和承诺,但我还没有使用它。

我已经很了解一切,但方法管。我真的没有得到它是什么。

有些人可以帮助我了解它的作用和在哪里可以使用?

我知道有一个问题就像这样(here),但它不一样。我要求帮助了解它和一些例子。另一个问题的目的是为什么在特定情况下不起作用。

解决方法

基本上, Deferred.pipe()是异步的,相当于 $.map().它从提供的其他值投入新的值作为输入,但其目的是与延续一起使用。

我们从一个例子开始,只需要$ .each(),并发出返回一个简单对象的AJAX请求。对于此对象的每个属性,我们希望表单控件的id属性属性的键,将其值设置为属性的值。我们可以写:

$.ajax("your/url",{
    dataType: "json"
}).done(function(data) {
    $.each(data,function(key,value) {
        $("#" + key).val(value);
    });
});

现在,我们要在更新表单控件之前,将一些函数应用于值。如果我们在本地做,我们只需要写:

$.ajax("your/url",value) {
        // doSomethingWith() projects values synchronously,as map() does.
        $("#" + key).val(doSomethingWith(value));
    });
});

但是,如果doSomethingWith()不是客户端实现,而是通过另一个Web服务的服务器端,会发生什么?在这种情况下,我们希望将控制流链接到第二个AJAX请求中,并且只有当第二个请求返回时才更新表单控件。 Deferred.pipe()使得简单:

$.ajax("your/url",{
    dataType: "json"
}).pipe(function(theOriginalData) {
    return $.ajax("your/web/service/doSomethingWith",{
        data: theOriginalData,dataType: "json"
    });
}).done(function(theFinalData) {
    $.each(theFinalData,value) {
        $("#" + key).val(value);
    });
});

猜你在找的jQuery相关文章