jQuery Promise 不会触发 .then() 或 .done()
jQuery Promise doesn't trigger .then() or .done()
我正在尝试使用承诺来确保某个函数在另一个函数返回之前不会触发。我看了很多例子,其他人的问题等等,据我所知我的语法是正确的,但是我的 .then(function())
不会 运行,所以我一定是遗漏了什么.
function previewMaster () {
var dfd = $.Deferred();
function prevAndTest() {
return true;
}
var doneYet = false;
var intvl = setInterval(function() {
if (doneYet === false) {
doneYet = prevAndTest();
//reassign doneYet until true
} else {
clearInterval(intvl);
dfd.resolve;
return dfd.promise();
}
}, 1000);
}
.then()
和 .done()
都不能在这里工作:
var promise = previewMaster();
promise.then(function() {
alert("finished");
});
您的解决方案无效,因为方法 previewMaster
未返回承诺:
function previewMaster () {
...
return dfd.promise();
}
并且因为当你想要 resolve promise 时需要调用 resolve
函数:
dfd.resolve();
在此处查看完整示例:
function previewMaster () {
var dfd = $.Deferred();
function prevAndTest() {
return true;
}
var doneYet = false;
var intvl = setInterval(function() {
if (doneYet === false) {
doneYet = prevAndTest();
//reassign doneYet until true
} else {
clearInterval(intvl);
dfd.resolve(); // <- resolve method must be called to resolve the promise.
// return dfd.promise(); // <- Do not return the promise here
}
}, 1000);
return dfd.promise(); // <- Return the promise here
}
我正在尝试使用承诺来确保某个函数在另一个函数返回之前不会触发。我看了很多例子,其他人的问题等等,据我所知我的语法是正确的,但是我的 .then(function())
不会 运行,所以我一定是遗漏了什么.
function previewMaster () {
var dfd = $.Deferred();
function prevAndTest() {
return true;
}
var doneYet = false;
var intvl = setInterval(function() {
if (doneYet === false) {
doneYet = prevAndTest();
//reassign doneYet until true
} else {
clearInterval(intvl);
dfd.resolve;
return dfd.promise();
}
}, 1000);
}
.then()
和 .done()
都不能在这里工作:
var promise = previewMaster();
promise.then(function() {
alert("finished");
});
您的解决方案无效,因为方法 previewMaster
未返回承诺:
function previewMaster () {
...
return dfd.promise();
}
并且因为当你想要 resolve promise 时需要调用 resolve
函数:
dfd.resolve();
在此处查看完整示例:
function previewMaster () {
var dfd = $.Deferred();
function prevAndTest() {
return true;
}
var doneYet = false;
var intvl = setInterval(function() {
if (doneYet === false) {
doneYet = prevAndTest();
//reassign doneYet until true
} else {
clearInterval(intvl);
dfd.resolve(); // <- resolve method must be called to resolve the promise.
// return dfd.promise(); // <- Do not return the promise here
}
}, 1000);
return dfd.promise(); // <- Return the promise here
}