Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从延迟的jQuery传递参数_Javascript_Jquery_Backbone.js_Jquery Deferred_Promise - Fatal编程技术网

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
迟早会消失的,所以我们必须处理它。一旦你想清楚了
。然后()
,它就会成为你最好的朋友。