问题是如果
res.data.length <= 0
你的承诺永远不会兑现。一般来说,使用Feather功能时,您不必调用
new Promise
你自己,因为一切都已经兑现了承诺。你可以通过使用
async/await
这将使代码更容易执行并完全避免您的问题:
async function isAppForbidden(hook) {
const res = await hook.app.service('settings').find({
query: {
$limit: 1,
$sort: {
createdAt: -1
}
},
user: {
roleId: hook.params.user.roleId
}
});
if(res.data.length > 0) {
let userHiddenApps = hook.params.user.hiddenApps || [];
let globalHiddenApps = res.data[0].forbiddenApps || [];
if (userHiddenApps.indexOf('qualitydocs') >= 0 || globalHiddenApps.indexOf('qualitydocs') >= 0) {
throw new errors.Forbidden(); //throws error for forbidden moduels
}
}
return hook;
}
before: {
all: [
authenticate('jwt'),
includeBefore,
isAppForbidden
],
find: [],
get: [],
create: [(hook) => {
hook.data.authorId = hook.params.user.id;
}],
update: [],
patch: [],
remove: []
},