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))
我将所有值放在一个对象中,然后将其传递给链......
答案 0 :(得分:2)
$.when
中的提醒警告全局变量而不是tasks
中的解决方案
此外,您永远不会致电wait()
,tasks()
也不会回复任何内容。
承诺的返回仅返回到永远不会被调用的wait()
。返回内部函数不会返回外部函数
此外,then()
中没有任何参数可以接收已解析的数据。
为了获取第二个then
的数据,您需要从第一个
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;