我一直在阅读关于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); }); });