对jQuery中的承诺感到困惑

时间:2015-10-10 06:32:19

标签: javascript jquery promise

1值不能改变承诺 例如

var t = function(s) {
  var wait = function(dtd) {    
    var dtd = $.Deferred();
    //new a Deferred object in function
        
    var tasks = function() {      
      alert("complete!");
      s = s + "hhh";      
      dtd.resolve(s); // change the state of deferred object      
    };      
    setTimeout(tasks, 5000);
    // return promise object
    return dtd.promise(s);
  };
}

var s = "hhh";
$.when(t(s))
  .then(function() {
    alert(s);
  }).then(function() {
    alert(s);
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

我只能得到“hhh”而不是“hhhhhh”......

2 如何用不同的值调用promise链?比如a.then(b(c))。那么(f(d))

我将所有值放在一个对象中,然后将其传递给链......

1 个答案:

答案 0 :(得分:2)

$.when中的提醒警告全局变量而不是tasks中的解决方案

此外,您永远不会致电wait()tasks()也不会回复任何内容。

承诺的返回仅返回到永远不会被调用的wait()。返回内部函数不会返回外部函数

此外,then()中没有任何参数可以接收已解析的数据。 为了获取第二个then的数据,您需要从第一个

返回一些内容

&#13;
&#13;
var t = function (s) {
    var wait = function () {    
        var dtd = $.Deferred();
        //new a Deferred object in function
            
        var tasks = function () {      
            alert("complete!");
            s = s + "hhh";      
            dtd.resolve(s); // change the state of deferred object      
        };      
        setTimeout(tasks, 2000);
        // return promise object
        return dtd.promise();
    };
   // return the promise inside `wait` 
   return wait()
}

var s = "hhh";
$.when(t(s)).then(function (resolvedData) {
    // return to the next then...just because we can
    return resolvedData; // must return something if want to access it in next then        
}).then(function(previousThenData) {       
    alert(previousThenData);// alert argument
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
&#13;
&#13;
&#13;