Javascript 未捕获类型错误:无法读取属性';获取';未定义错误的定义

Javascript 未捕获类型错误:无法读取属性';获取';未定义错误的定义,javascript,parse-platform,Javascript,Parse Platform,我正在尝试使用用户类的电子邮件或用户名登录。但是,当我查询电子邮件并尝试 object.get("username") 我收到上面的错误消息。奇怪的是,当我在调试器中测试助手函数getUsername时,它工作得很好 function getUsername(email) { var query = new Parse.Query(Parse.User); query.equalTo('email', email); query.first({ success: func

我正在尝试使用用户类的电子邮件或用户名登录。但是,当我查询电子邮件并尝试

object.get("username") 
我收到上面的错误消息。奇怪的是,当我在调试器中测试助手函数getUsername时,它工作得很好

function getUsername(email) {
  var query = new Parse.Query(Parse.User);
  query.equalTo('email', email);
  query.first({
    success: function(object) {
      console.log(object.get("username"));
      return object.get("username");
    },
    error: function(user, error) {
      console.log("no email");
    }
  });
}


function signIn(usernameOrEmail, password) {

  //if not email sign in with username
  if (usernameOrEmail.indexOf("@") == -1) {
    Parse.User.logIn(usernameOrEmail, password, {
      success: function(user) {
        console.log("Logged in!");
      },
      error: function(user, error) {
        alert("Error: " + error.code + " " + error.message);
      }
    });
  }
  //query for username from email and signin
  else {
    var username = getUsername(usernameOrEmail);
    Parse.User.logIn(username, password, {
      success: function(user) {
        console.log("Logged in!");
      },
      error: function(user, error) {
        alert("Error: " + error.code + " " + error.message);
      }
    });
  }
}

query.first
是一个异步函数。要使用它返回的值,必须在
success:
回调函数中执行。因此,将callbak传递给执行登录的
getUsername

function getUsername(email, callback) {
  var query = new Parse.Query(Parse.User);
  query.equalTo('email', email);
  query.first({
    success: function(object) {
      if (object) {
        console.log(object.get("username"));
        callback(object.get("username"));
      } else {
        console.log("email not found");
      }
    },
    error: function(user, error) {
      console.log("no email");
    }
  });
}

function signIn(usernameOrEmail, password) {

  //if not email sign in with username
  if (usernameOrEmail.indexOf("@") == -1) {
    Parse.User.logIn(usernameOrEmail, password, {
      success: function(user) {
        console.log("Logged in!");
      },
      error: function(user, error) {
        alert("Error: " + error.code + " " + error.message);
      }
    });
  }
  //query for username from email and signin
  else {
    getUsername(usernameOrEmail, function(username) {
        signIn(username, password);
    });
  }
}

getUsername
不返回任何内容。
return
语句位于异步回调函数中。如果我不返回任何内容,如何设置username=getUsername(email)?您需要将回调函数传递给
getUsername
,它应该在success函数中调用它。我可以将查询放在signIn函数中吗?我不知道回调函数是如何工作的。
success:
之后的所有函数都是回调函数。不幸的是,当我用我的代码替换你的代码时,我仍然收到一个错误,说signIn没有定义。感谢迄今为止所做的一切,如有任何其他帮助,将不胜感激!检查拼写错误,因为我不明白为什么会发生这种情况。函数名的作用域包括它的函数体。你有一个公共URL我可以试试吗?没有,我没有公共URL,我只会查找输入错误。谢谢你!错误在最后一行中,表示意外标识符