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)
当我使用现有的电子邮件地址(用户名)或新的电子邮件地址发布时,我得到"服务器错误".(顺便说一句,我发现自己对如何调试一无所知.我的开发循环是研究 - 猜测 - 代码 - 部署 - 不可理解的错误 - 重复......).
解决方案结果很简单.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语句有点分散注意力.它们在履行承诺并且开始下一个承诺时运行,但函数仍然需要返回它的调用者所期望的内容.