为什么“undefined为null或不是对象”?

时间:2014-11-03 14:49:08

标签: javascript jquery

我试图理解这个代码示例。我已经删除了用于发布目的的网址,但我相当肯定这不是问题..... 我正在查看脚本/调试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();" />

1 个答案:

答案 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();
        });
    });
});

在解决上一个延迟之后,将调用每个函数,大概是在所有等待和间隔到期之后。