jQuery推迟并承诺不能正常工作
jQuery deferred and promise not work corectly
我有这个代码:
var d = $.Deferred();
var promise = d.promise();
//
promise = promise.then(function(){
var t = new $.Deferred();
var cont = $('.cont').find('> div');
requirejs(["transit"], function(){
cont.transit({opacity: .4});
//
setTimeout(function(){
cont.remove();
return t.promise();
}, 500);
});
});
//
promise.then(function() {
console.log('test');
});
//
d.resolve();
我想发起一些接一个的行动。但我需要舒尔,第一个已经完成了。所以我使用承诺和延迟方法。有些不对劲 bc 第二个操作在定义的超时延迟之前开始。怎么了?有人可以帮忙吗?
链设置不正确?
t
承诺尚未归还给d
链。
修改后的代码
var d = $.Deferred();
var promise = d.promise();
//
promise = promise.then(function(){
var t = new $.Deferred();
console.log('1st promise callback');
//var cont = $('.cont').find('> div');
setTimeout(function(){
//requirejs(["transit"], function(){
//cont.transit({opacity: .4});
//
console.log('timeout 1 func');
setTimeout(function(){
console.log('timeout 2 func');
//cont.remove();
t.resolve(true);
}, 10);
},30);
return t.promise();
});
//
promise.then(function() {
console.log('test');
});
//
d.resolve();
输出
1st promise callback (index):27
timeout 1 func (index):33
timeout 2 func (index):36
test
在这里摆弄
为什么不使用 $.when
$.when(function).done(function( x ) {
console.log('test');
});
您正在使用某种非 Jquery 异步(如果您已经有 jQuery,则完全没有必要)函数 - 由于异步操作在单独的线程上运行,调用者将立即完成。如果你真的想确保顺序执行,你可以简单地使用一个正确的jQuery UI方法(如animate : http://api.jquery.com/animate/)并添加一个完整的处理程序,如链接中所述
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)