我正在与Q.JS库合作做出承诺。我已经尝试了以下方案,其中一个函数在执行某个代码之前等待另一个函数以解决延期,并且可以与JQuery Native Prosiss一起使用。但是,同一代码立即使用q.js返回。有什么想法吗?
小提琴:http://jsfiddle.net/arn8f/5/
html:
<button id='go'>Go</button>
<p id='txt'></p>
<p id='txt2'></p>
jQuery代码(等待2秒,然后更改文本):
$(document).ready(function () {
var dfd = $.Deferred();
$('#go').click(function () {
$('#txt').text('Clicked!');
promised();
setTimeout(dfd.resolve, 2000);
});
function promised() {
$.when(dfd).done(function () {
$('#txt2').text('Done');
});
}
})
q.js代码(立即更改文本):
$(document).ready(function () {
var dfd = Q.defer();
$('#go').click(function () {
$('#txt').text('Clicked!');
promised();
setTimeout(dfd.resolve, 2000);
});
function promised() {
Q.when(dfd, function () {
$('#txt2').text('Done');
});
}
})
我猜,您应该这样使用Q.when
:
Q.when(dfd.promise, function () {
// ..
});
请注意,它是dfd.promise
,而不仅仅是dfd
。
工作演示。