Javascript 如何从延迟的jQuery传递参数
我有一个主干模型,它获取一些数据,处理数据,然后一个函数应该得到处理后的数据Javascript 如何从延迟的jQuery传递参数,javascript,jquery,backbone.js,jquery-deferred,promise,Javascript,Jquery,Backbone.js,Jquery Deferred,Promise,我有一个主干模型,它获取一些数据,处理数据,然后一个函数应该得到处理后的数据 $.when(model.fetch()) .done(function(){ return model.processData() }) .then(function(processedData){ //make something with the processed data }) 不幸的是,then方法从model.fetch()调用中获取结果,而不是done函数的返回值,您必
$.when(model.fetch())
.done(function(){
return model.processData()
})
.then(function(processedData){
//make something with the processed data
})
不幸的是,
then
方法从model.fetch()
调用中获取结果,而不是done
函数的返回值,您必须使用。然后使用而不是。done
。然后
返回一个新的承诺,该承诺使用回调函数返回的值进行解析
另一方面,.done
返回原始承诺对象,回调的返回值被忽略
更多信息可在(我的)中找到:
从jQuery 1.8开始,deferred.then()
方法返回一个新的承诺,该承诺可以通过一个函数过滤deferred.pipe()的状态和值,替换现在不推荐的deferred.pipe()
方法。doneFilter
和failFilter
功能过滤原始延迟的已解决/已拒绝状态和值。progressFilter
函数过滤对原始延迟的notify
或notifyWith
方法的任何调用这些筛选函数可以返回一个新值,传递给承诺的.done()
或.fail()
回调,也可以返回另一个可观察对象(延迟、承诺等),该对象将其已解决/拒绝的状态和值传递给承诺的回调。如果使用的过滤函数为null
,或未指定,则承诺将以与原始承诺相同的值进行解析或拒绝
您必须使用。然后
而不是。完成
。然后
返回一个新的承诺,该承诺使用回调函数返回的值进行解析
另一方面,.done
返回原始承诺对象,回调的返回值被忽略
更多信息可在(我的)中找到:
从jQuery 1.8开始,deferred.then()
方法返回一个新的承诺,该承诺可以通过一个函数过滤deferred.pipe()的状态和值,替换现在不推荐的deferred.pipe()
方法。doneFilter
和failFilter
功能过滤原始延迟的已解决/已拒绝状态和值。progressFilter
函数过滤对原始延迟的notify
或notifyWith
方法的任何调用这些筛选函数可以返回一个新值,传递给承诺的.done()
或.fail()
回调,也可以返回另一个可观察对象(延迟、承诺等),该对象将其已解决/拒绝的状态和值传递给承诺的回调。如果使用的过滤函数为null
,或未指定,则承诺将以与原始承诺相同的值进行解析或拒绝
要从done
处理程序截取、修改或过滤数据以进一步调用,可以使用.pipe()
方法
即使在您的示例中,您可以完全用替换.done()
,然后直接使用处理程序,它也可能看起来像:
$.when(model.fetch())
.pipe(function() {
return model.processData();
})
.then(function(processedData){
//make something with the processed data
});
当然,这并不像上面提到的那样有太多意义,但无论如何,请考虑一下.pipe()
的可能性。它可能是一个非常方便的工具。要截取、修改或过滤来自done
处理程序的数据以进一步调用,可以使用.pipe()
方法
即使在您的示例中,您可以完全用替换.done()
,然后直接使用处理程序,它也可能看起来像:
$.when(model.fetch())
.pipe(function() {
return model.processData();
})
.then(function(processedData){
//make something with the processed data
});
当然,这并不像上面提到的那样有太多意义,但无论如何,请考虑一下.pipe()
的可能性。它可能是一个非常方便的工具。$。when()
应该不是必需的
这里有两种可能性:
model.fetch().then(function() {
return model.processData()
}).then(function(processedData){
//make something with the processed data
});
或者,如果processData()
是同步的:
model.fetch().done(function() {
var foo = model.processData();
//make something with the processed data, foo
});
$.when()
应该不是必需的
这里有两种可能性:
model.fetch().then(function() {
return model.processData()
}).then(function(processedData){
//make something with the processed data
});
或者,如果processData()
是同步的:
model.fetch().done(function() {
var foo = model.processData();
//make something with the processed data, foo
});
将done
替换为然后
。看。这很快,谢谢用替换完成
,然后
。请看。这很快,谢谢。不过现在不推荐使用管道。这个行为被添加到。然后@FelixKling我不知道它被声明为不推荐的,我来读一读。关于它有一个很长的讨论。这样做是为了更符合最初的CommonJS承诺/A提案:。我刚刚阅读了wiki和jQuery文档,我不得不说,我一点也不喜欢它。然后
现在似乎是IMO过载的一种方式,而且也不是很方便。无论如何,.pipe
迟早会消失的,所以我们必须处理它。一旦你想清楚了。然后()
,它就成了你最好的朋友。.pipe
现在已经被弃用了。这个行为被添加到。然后@FelixKling我不知道它被声明为不推荐的,我来读一读。关于它有一个很长的讨论。这样做是为了更符合最初的CommonJS承诺/A提案:。我刚刚阅读了wiki和jQuery文档,我不得不说,我一点也不喜欢它。然后
现在似乎是IMO过载的一种方式,而且也不是很方便。无论如何,.pipe
迟早会消失的,所以我们必须处理它。一旦你想清楚了。然后()
,它就会成为你最好的朋友。