代码之家  ›  专栏  ›  技术社区  ›  Anish Khatri

已定义函数表示undefined,在Javascript中使用.then[复制]

  •  -2
  • Anish Khatri  · 技术社区  · 2 年前
    loginService.islogged() 
    

    上面的函数返回一个类似“failed”的字符串。 然而,当我尝试在其上运行then函数时,它将返回错误

    TypeError: Cannot read property 'then' of undefined
    

    光标就在后面指示 connected 以及之前 .then .

    以下是完整功能:

    var connected=loginService.islogged();
    alert(connected);
    connected.then(function(msg){
        alert("connected value is "+connected);
        alert("msg.data value is "+msg.data);
        if(!msg.data.account_session || loginService.islogged()=="failed")       
            $location.path('/login');
    });
    

    更新

    这是 islogged() 功能

    islogged:function(){
        var cUid=sessionService.get('uid');
        alert("in loginServce, cuid is "+cUid);
        var $checkSessionServer=$http.post('data/check_session.php?cUid='+cUid);
        $checkSessionServer.then(function(){
            alert("session check returned!");
            console.log("checkSessionServer is "+$checkSessionServer);
            return $checkSessionServer;
        });
    }
    

    我确信 $checkSessionServer 将导致一个“失败”的字符串。仅此而已。

    0 回复  |  直到 8 年前
        1
  •  154
  •   Saravanan Sachi TheSharpieOne    8 年前

    您需要将promise返回给调用函数。

    islogged:function(){
        var cUid=sessionService.get('uid');
        alert("in loginServce, cuid is "+cUid);
        var $checkSessionServer=$http.post('data/check_session.php?cUid='+cUid);
        $checkSessionServer.then(function(){
            alert("session check returned!");
            console.log("checkSessionServer is "+$checkSessionServer);
        });
        return $checkSessionServer; // <-- return your promise to the calling function
    }
    
        2
  •  4
  •   Cyber Square Professional    8 年前

    TypeError:使用AngularJS调用Django服务时,无法读取undefined的属性'then'。

    如果你正在调用Python服务,代码如下:

    this.updateTalentSupplier=function(supplierObj){
      var promise = $http({
        method: 'POST',
          url: bbConfig.BWS+'updateTalentSupplier/',
          data:supplierObj,
          withCredentials: false,
          contentType:'application/json',
          dataType:'json'
        });
        return promise; //Promise is returned 
    }
    

    我们使用MongoDB作为数据库(我知道这没关系。但如果有人用MongoDB+Python(Django)+AngularJS搜索,结果应该会出来。

        3
  •  -1
  •   Velkumaran A P    4 年前

    返回函数内部的promise值

    return new Promise((done, err) => {
            ......
    })
    
        4
  •  -1
  •   klutt    3 年前

    嗨,我们在测试环境中遇到了同样的错误 我们正在使用typescript、测试库/react

    我使用的是nodev14.X,但其他人使用的是node 16.X及更高版本 他们得到了这个错误。 因此,我更新了我的节点版本,然后能够在本地复制它。

    然后在测试文件中,在行为中添加了模拟调用,因为它也会影响状态的更新

    act(() => {
        mockAxios.post.mockImplementation(
            async () => Promise.resolve(availabilitySuccessMockData)
        );
    });
    
        5
  •  -1
  •   Nihal Selma KESLER    3 年前

    你需要在函数中返回promise。 它应该是这样的:

       return new Promise(async (resolve, reject) => {
    
        const { data:users } = await axios("https://jsonplaceholder.typicode.com/users/" + Number);
        
        const { data: posts } = await axios("https://jsonplaceholder.typicode.com/posts?id=1" + Number);
    
        const completeData = [users, posts];
    
        resolve(completeData);
      });