Javascript jquerypromise没有';t触发器.then()或.done()
我试图使用一个承诺来确保某个函数在另一个函数返回之前不会启动。我已经看了很多例子,其他人的问题等等,就我所知,我的语法是正确的,但是我的Javascript jquerypromise没有';t触发器.then()或.done(),javascript,jquery,promise,jquery-deferred,deferred,Javascript,Jquery,Promise,Jquery Deferred,Deferred,我试图使用一个承诺来确保某个函数在另一个函数返回之前不会启动。我已经看了很多例子,其他人的问题等等,就我所知,我的语法是正确的,但是我的。然后(function())就不能运行了,所以我肯定遗漏了什么 function previewMaster () { var dfd = $.Deferred(); function prevAndTest() { return true; } var doneYet = false; var intvl = setInte
。然后(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();
}
dfd.resolve();
而且,因为您需要在想要解析承诺时调用resolve
函数:
function previewMaster () {
...
return dfd.promise();
}
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
}
函数预览主控(){
var dfd=$.Deferred();
函数prevAndTest(){
返回true;
}
var-doneYet=false;
var intvl=setInterval(函数(){
if(doneYet==false){
doneYet=prevAndTest();
//重新分配doneYet直到为true
}否则{
清除间隔(intvl);
dfd.resolve();//您的解决方案不起作用,因为方法previewMaster
没有返回承诺:
function previewMaster () {
...
return dfd.promise();
}
dfd.resolve();
而且,因为您需要在想要解析承诺时调用resolve
函数:
function previewMaster () {
...
return dfd.promise();
}
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
}
函数预览主控(){
var dfd=$.Deferred();
函数prevAndTest(){
返回true;
}
var-doneYet=false;
var intvl=setInterval(函数(){
if(doneYet==false){
doneYet=prevAndTest();
//重新分配doneYet直到为true
}否则{
清除间隔(intvl);
dfd.resolve();//dfd.resolve;
是一个函数…使用dfd.resolve(“值来解析承诺,因为承诺就是这样做的”);
另外,返回dfd.promise()
完全错误-您需要从previewMaster函数返回它,而不是从对setInterval@JaromandaX绝对正确。文档:无法在setInterval
内返回。从previewMaster
中根本不返回任何内容。您可以在setInterval
内返回-返回值不正确ng anywhere:pdfd.resolve;
是一个函数…使用dfd.resolve(“值来解析承诺,因为承诺就是这样做的”);
另外,在这里返回dfd.promise()
完全错误-您需要从previewMaster函数返回它,而不是从对setInterval@JaromandaX绝对正确。文档:无法在setInterval
内返回。从previewMaster
中根本不返回任何内容。您可以在setInterval
内返回-返回值不正确ng:p