为什么不将诺言传递给下一个呢?
Why isn't the promise being passed on to the next then?
我试图通过以下代码确定我的应用程序中 admin 的角色是否是超级用户:
AdminServices.js
var isSuper_User = function(email) {
models.admin.findOne({ where: { email } }).then(function(admin) {
logger.debug("Fetching user with email: ", email);
logger.debug("admin.role: ", admin.role);
isSuper_User = admin.role === 'super_user' ? true : false;
logger.debug("isSuper_User: ", isSuper_User);
new Promise(function(resolve, reject) {
resolve(isSuper_User)
})
}).catch(err=>
logger.debug(err.toString())
);
};
admin_routes.js
router.get("/isSuperUser/:email", function(req, res) {
logger.debug("req.params.email: ", req.params.email);
adminService.isSuper_User(req.params.email).then(isSuper_User => {
logger.info("isSuper_User returned from promise: ", isSuper_User);
});
});
logger 是一个允许自定义终端日志记录的模块。
但是,当我通过电子邮件发送请求时,对于角色为管理员的用户,admin_routes 中的记录器代码不会记录任何内容。不过,AdminServices 中的一切都运行良好。
这是我在终端中得到的:
所以问题在于我处理承诺的方式。但是,我没有看到我到底做错了什么。
isSuper_User
函数没有 return
语句。
这不是 return 承诺,它 return 是 undefined
。
您需要明确地return承诺。
return models.admin.findOne....
函数 isSuper_User
没有 returning 任何东西。
函数应该return promise
var isSuper_User = function(email) {
return models.admin.findOne({ where: { email } }).then(function(admin) {
logger.debug("Fetching user with email: ", email);
logger.debug("admin.role: ", admin.role);
isSuper_User = admin.role === 'super_user';
//admin.role === 'super_user' already returns true or false so no need of ternary.
logger.debug("isSuper_User: ", isSuper_User);
return isSuper_User;
//No need of promise wrapper here.
}).catch(err=>
logger.debug(err.toString())
);
};
您必须return 函数的承诺。在给定的代码中,你没有 returning 任何东西,它等于 undefined
.
var isSuper_User = function(email) {
return models.admin
.findOne({ where: { email } })
.then(function(admin) {
logger.debug("Fetching user with email: ", email);
logger.debug("admin.role: ", admin.role);
isSuper_User = admin.role === "super_user" ? true : false;
logger.debug("isSuper_User: ", isSuper_User);
return isSuper_User;
})
.catch(err => {
logger.debug(err.toString());
throw err;
});
};
我试图通过以下代码确定我的应用程序中 admin 的角色是否是超级用户:
AdminServices.js
var isSuper_User = function(email) {
models.admin.findOne({ where: { email } }).then(function(admin) {
logger.debug("Fetching user with email: ", email);
logger.debug("admin.role: ", admin.role);
isSuper_User = admin.role === 'super_user' ? true : false;
logger.debug("isSuper_User: ", isSuper_User);
new Promise(function(resolve, reject) {
resolve(isSuper_User)
})
}).catch(err=>
logger.debug(err.toString())
);
};
admin_routes.js
router.get("/isSuperUser/:email", function(req, res) {
logger.debug("req.params.email: ", req.params.email);
adminService.isSuper_User(req.params.email).then(isSuper_User => {
logger.info("isSuper_User returned from promise: ", isSuper_User);
});
});
logger 是一个允许自定义终端日志记录的模块。
但是,当我通过电子邮件发送请求时,对于角色为管理员的用户,admin_routes 中的记录器代码不会记录任何内容。不过,AdminServices 中的一切都运行良好。
这是我在终端中得到的:
所以问题在于我处理承诺的方式。但是,我没有看到我到底做错了什么。
isSuper_User
函数没有 return
语句。
这不是 return 承诺,它 return 是 undefined
。
您需要明确地return承诺。
return models.admin.findOne....
函数 isSuper_User
没有 returning 任何东西。
函数应该return promise
var isSuper_User = function(email) {
return models.admin.findOne({ where: { email } }).then(function(admin) {
logger.debug("Fetching user with email: ", email);
logger.debug("admin.role: ", admin.role);
isSuper_User = admin.role === 'super_user';
//admin.role === 'super_user' already returns true or false so no need of ternary.
logger.debug("isSuper_User: ", isSuper_User);
return isSuper_User;
//No need of promise wrapper here.
}).catch(err=>
logger.debug(err.toString())
);
};
您必须return 函数的承诺。在给定的代码中,你没有 returning 任何东西,它等于 undefined
.
var isSuper_User = function(email) {
return models.admin
.findOne({ where: { email } })
.then(function(admin) {
logger.debug("Fetching user with email: ", email);
logger.debug("admin.role: ", admin.role);
isSuper_User = admin.role === "super_user" ? true : false;
logger.debug("isSuper_User: ", isSuper_User);
return isSuper_User;
})
.catch(err => {
logger.debug(err.toString());
throw err;
});
};