我试图理解这个代码示例。我已经删除了用于发布目的的网址,但我相当肯定这不是问题..... 我正在查看脚本/调试F12,控制台说:
日志:A
'未定义'是null还是不是对象
在这一行" A()。然后(B())。然后(C())。然后(D());"
我也剥夺了2秒延迟&发出警报(),同样的错误 ...律'帮助
<script>
function A() {
console.log("A");
}
function B() {
console.log("B");
var intervalId = setInterval(function() {
clearInterval(intervalId);
console.log("Section: ");
deferred.resolve();
}, 2000);
console.log("B and 2 sec");
}
function C() {
console.log("C");
}
function D() {
console.log("D");
}
function dMain() {
A().then(B()).then(C()).then(D());
}
</script>
<input id="clickMe" type="button" value="Generate Exam" onclick="javascript:dMain();" />
答案 0 :(得分:1)
您的函数A
不返回任何内容,因此尝试使用返回值等同于undefined.then()
并且undefined不是对象。
您可能想要的是使用某种类型的延迟,可能jQuery's version。有一些很好的例子on their site,所以你可能会看到类似的东西:
function A() {
var def = $.Deferred();
console.log("A");
def.resolve();
return def;
}
这将返回一个已经解决的延迟对象。
对于A().then(B()).then(C()).then(D())
行,您可能希望在上一个函数解析时调用每个函数。您当前的代码要求每个函数都返回一个延迟对象,但也会在开头调用它们。我不确定处理这个问题的最佳方法(取决于你在哪里使用它),但这样的事情可能有用:
A().then(function () {
B().then(function() {
C().then(function() {
D();
});
});
});
在解决上一个延迟之后,将调用每个函数,大概是在所有等待和间隔到期之后。