【发布时间】:2017-06-08 15:10:06
【问题描述】:
我正在尝试使用承诺来确保某个函数在另一个函数返回之前不会触发。我查看了很多示例,其他人的问题等,据我所知,我的语法是正确的,但我的 .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");
});
【问题讨论】:
-
dfd.resolve;是一个函数...使用dfd.resolve("value to resolve the promise to because that's what promises do"); -
另外,你在哪里返回
dfd.promise()是完全错误的 - 你需要从 previewMaster 函数返回它,而不是回调到 setInterval -
@JaromandaX 是绝对正确的。文档:api.jquery.com/deferred.resolve
-
无法在
setInterval内返回。previewMaster没有返回任何内容 -
你可以在
setInterval内部返回 - 返回的值不会去任何地方:p
标签: javascript jquery promise jquery-deferred deferred