我正在使用以下代码调用类
var user_ctx = new user();
user_ctx
.set_email(req.body.email)
.then(user_ctx.set_username(req.body.username))
.catch((err)=>{
console.log(err);
});
并且类定义如下
function user () {
this.user = {};
};
user.prototype.set_username = function (username) {
return new Promise((fullfill,reject)=>{
this.user.username = username;
fullfill();
});
};
user.prototype.set_email = function (email) {
return new Promise((fullfill,reject)=>{
var email_ctx = new email_lib(email);
email_ctx
.is_valid()
.then(function() {
this.user.email = email;
})
.then(fullfill)
.catch(reject);
});
};
问题是email
我们没有在用户中定义。我也试过以下
user.prototype.set_email = function (email) {
return new Promise((fullfill,reject)=>{
var email_ctx = new email_lib(email);
var that = this;
email_ctx
.is_valid()
.then(function() {
that.user.email = email;
})
.then(fullfill)
.catch(reject);
});
};
从而在回调函数内使用that
引用它;但电子邮件仍未设置。已经尝试记录变量email
在set_email
的承诺链中,我在哪里错了?
答案 0 :(得分:1)
由于多个错误/不正确的实现,您的代码无法按预期工作:
action event
,无需等待承诺即可解决。您必须使用user_ctx.set_username
。.then(user_ctx.set_username(req.body.username))
.then(() => user_ctx.set_username(req.body.username))
已经返回一个promise。email_ctx
。函数this
内部指向父函数。正确实施可能如下所示:
this