Как вы можете видеть в .gif ниже, при первом вызове моей базы данных он успешно возвращает данные. Но в следующие два раза он не возвращает ни ошибок, асинхронный код просто исчезает. И что еще хуже, мое выражение ожидания не ждет ответа, оно просто продолжается.
Может ли кто-нибудь сказать мне, почему последующие вызовы Sequelize исчезают? И что еще более важно, почему код вызова продолжает работать, хотя я использовал await
?
Вот самый внутренний код:
getRolesAndPermissionsForUser(userId: string): Promise<[IRoleModel]> {
return new Promise<[IRoleModel]>( async (resolve: any, reject: any) => {
try {
const rows = await this._db.getSequelize().transaction( (transaction) => {
return this._db.getSequelize().query(getRolesAndPermissionsForUserSql, { type: Sequelize.QueryTypes.SELECT, replacements: [userId] });
})
resolve(this.convertRolesToTree(rows));
}
catch (error) { reject(error); }
});
}
вызванный:
async function hasPermission(hapiResolve: (response: any) => void, requestingUserId: string, requestedUserId: string, requestedUsersRoles: any[]): Promise<boolean> {
return new Promise<boolean>( (resolve, reject) => {
try {
//user is seeng her own roles
let result = (requestingUserId === requestedUserId);
//user manages a franchisor the requestee is part of
if (!result) {
requestedUsersRoles.forEach( async (role) => {
if (!result) { //may have found it last iteration
const userHasOrgPermission = await self._bouncer.doesUserHavePermission(null, requestingUserId, DatabaseIds.enum__permissions__canViewAllRolesOfAnyUseratThisFranchisor, role.franchisorId, null)
if (userHasOrgPermission) result = true;
}
})
}
//user manages a franchisee the requestee is part of
if (!result) {
requestedUsersRoles.forEach( async (role) => {
if (!result) { //may have found it last iteration
const userHasOrgPermission = await self._bouncer.doesUserHavePermission(null, requestingUserId, DatabaseIds.enum__permissions__canViewAllRolesOfAnyUseratThisFranchisor, null, role.franchiseeId)
if (userHasOrgPermission) result = true;
}
})
}
if (!result)
hapiResolve(responseHelper.getErrorResponse(ResponseErrorCode.notAuthorised));
resolve(result);
}
catch (error) {
console.trace(error);
reject(error);
}
});
}
doesUserHavePermission(hapiResolve: (response: any) => void, userId: string, permissionId: string, franchisorId: string, franchiseeId: string): Promise<boolean> {
return new Promise<boolean>( async (resolve, reject) => {
try {
const roles = await this._rolesQueries.getRolesAndPermissionsForUser(userId);
if (!this.doRolesHavePermission(roles, permissionId, franchisorId, franchiseeId)) {
if (hapiResolve)
hapiResolve(responseHelper.getErrorResponse(ResponseErrorCode.notAuthorised));
resolve(false);
}
else resolve(true);
}
catch (error) {
if (hapiResolve)
hapiResolve(responseHelper.getErrorResponse(ResponseErrorCode.unknownError));
reject(error);
}
});
}