我收到错误说“TypeError:callback不是函数”

时间:2017-07-09 06:27:45

标签: javascript

这是我的代码,我收到错误,说“回调未定义”,我很困惑,即使我已将函数作为参数发送到搜索功能,它也将其视为未定义。

    class Tree{
    constructor(){
        this.data;
        this.left;
        this.right;
    }
    Insert(data)
    {
       if(this.data)
       {
         if(this.data<data)
         {
             if(this.right)
             {
               this.right.Insert(data)
             }
             else{
                 this.right=new Tree();
                 this.right.Insert(data)
             }
         }
         else{
              if(this.left)
             {
               this.left.Insert(data)
             }
             else{
                 this.left=new Tree();
                 this.left.Insert(data)
             }
         }
       }
       else{
           this.data=data;
       }
    }
    Display(){
        if(this.left)
        {

            this.left.Display();
        }
        console.log(this.data);
        if(this.right)
        {   
            this.right.Display();
        }
    }
    Search(data,callback){

        if(data==this.data)
        {
            console.log("found")
            callback("found")
        }
        else if(data>this.data)
        {
            if(this.right)
            {
                this.right.Search(data);
            }
            else callback("not found")
        }
        else if(data<this.data){
            if(this.left)
            {
                this.left.Search(data);
            }
            else callback("not found")
        }
    }
}


var k =new Tree();
k.Insert(41);
k.Insert(34);
k.Insert(53);
k.Insert(384);
k.Search(34,function (res){
  console.log(res)
});

你们可以帮帮我吗?非常感谢提前

2 个答案:

答案 0 :(得分:4)

search功能中,如果没有Serach参数

,请致电callback
Search(data,callback){

    if(data==this.data)
    {
        console.log("found")
        callback("found")
    }
    else if(data>this.data)
    {
        if(this.right)
        {
            this.right.Search(data, callback);
        }
        else callback("not found")
    }
    else if(data<this.data){
        if(this.left)
        {
            this.left.Search(data, callback);
        }
        else callback("not found")
    }
}

答案 1 :(得分:3)

在这部分

else if(data>this.data)
    {
        if(this.right)
        {
            this.right.Search(data);
        }

您不发送回叫,每次调用时都应发送回叫。

<强> 解决方案

else if(data>this.data)
    {
        if(this.right)
        {
            this.right.Search(data, callback);
        }