jquery 延迟返回数据

jquery defered returning data on when

您好,我正在尝试了解 $.deffered。一旦计算完成,我如何 return 数据?

function cube(n)
{
//console.log(n);
return n = Math.pow(n, 3);
}

function compute(n){
    var d = $.Deferred();

    n = cube(n);
    //how do i return n upon completed computation?
    return d.promise(n);
}



$.when(compute(5))
    .done(function(data){
        console.log(data);
    });

http://jsfiddle.net/ysfk00bc/

js 问题似乎没有 return 值 jQuery.Deferred() 回调处理程序 .done() 。参见 deferred.resolve()

jQuery.Deferred() 方法 resolve , reject return 值已解决或拒绝 jQuery 延迟方法的原因 .done , .fail.thenalways

尝试将 n 作为参数传递给 computejQuery.Deferred().resolve() 方法,例如 d.resolve(n).

不需要将 compute(5) 包装在 $.when() 中 - return 是一个 jQuery 承诺 - 因为 compute 会 return jQuery 承诺反对 .done()return d.promise() .

function cube(n) {
  return Math.pow(n, 3);
}

function compute(n) {
  var d = new $.Deferred();
  n = cube(n);
  // return jQuery promise `n`: `cube(n)`
  d.resolve(n);
  return d.promise();
}

compute(5)
.done(function(data) {
  console.log(data);
});

compute(2)
.done(function(data) {
  console.log(data);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>


或者在 compute 中使用 $.when(),return jQuery 承诺 ncube(n)

function cube(n) {
  return Math.pow(n, 3);
}

function compute(n) {
  n = cube(n);
  // return jQuery promise `n`: `cube(n)`
  return $.when(n);
}

compute(5)
.done(function(data) {
  console.log(data);
});

compute(2)
.done(function(data) {
  console.log(data);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>