解析云注册,使用JS承诺登录

dan*_*anh 2 javascript parse-platform

我想创建一个parse.com云功能,根据是否识别凭据,登录或注册用户.我想我正在接受承诺,特别是关于then和error函数的参数.

这个功能有效:

function signUp(params) {
  var password = "my app supplies the password";
  var user = new Parse.User();

  user.set("username", params['email']);    // in my app, email==username
  user.set("password", password);
  user.set("email", params['email']);

  return user.signUp(null);
}
Run Code Online (Sandbox Code Playgroud)

像这样调用它会产生一个很好的signUp结果:

app.post('/reg', function(req, res) {
  signUp(req.body).then(function(user) {
    res.render('myView', { username: Parse.User.current().get('username') });
  }, function(user, error){
    res.render('myView', { username: 'error' });
  });
});
Run Code Online (Sandbox Code Playgroud)

同样,这个以完全相同的方式调用:

function logIn(params) {
  var username =  params['email'];
  var password = "my app supplies the password";
  return Parse.User.logIn(username, password);
}
Run Code Online (Sandbox Code Playgroud)

这是问题所在,为什么这个不起作用?以同样的方式打电话......

function logInOrSignUp(params) {
  logIn(params).then(function(user) {
    return user;
    // or should this be return Parse.Promise.as(user); ?
    // this is where I've become confused.
  }, function(user, error) {
    // login failed, let's take that to mean the user is new
    // issue: are these the right params for the error function?
    // the parse docs seem to indicate that login error block takes two params
    // issue: signUp(params) can return a promise, does this
    // return that promise from the function?
    return signUp(params);
  });
}
Run Code Online (Sandbox Code Playgroud)

当我使用现有的电子邮件地址(用户名)或新的电子邮件地址发布时,我得到"服务器错误".(顺便说一句,我发现自己对如何调试一无所知.我的开发循环是研究 - 猜测 - 代码 - 部署 - 不可理解的错误 - 重复......).

dan*_*anh 6

解决方案结果很简单.then()我的logInOrSignUp()函数中的该方法返回一个promise,但我的代码无法返回它.

function logInOrSignUp(params) {
  return logIn(params).then(function(user) {
    return user;
  }, function(user, error) {
    return signUp(params);
  });
}
Run Code Online (Sandbox Code Playgroud)

回调参数中的return语句有点分散注意力.它们在履行承诺并且开始下一个承诺时运行,但函数仍然需要返回它的调用者所期望的内容.

我认为Burt Bacharach说得最好......