Как относиться к обещанию внутри крючка пера?
Я хочу проверить данные перед вставкой в базу данных. Путь Feathersjs заключается в использовании хуков. Прежде чем вставлять группу разрешений, я должен принять во внимание целостность данных, предоставленных постом пользователя. Мое решение состоит в том, чтобы найти все разрешения, связанные с данными, предоставленными пользователем. Сравнивая длины списков, я могу доказать, правильные ли данные. Код крючка размещен ниже:
const permissionModel = require('./../../models/user-group.model');
module.exports = function (options = {}) {
return function usergroupBefore(hook) {
function fnCreateGroup(data, params) {
let inIds = [];
// the code in this block is for populating the inIds array
if (inIds.length === 0) {
throw Error('You must provide the permission List');
}
//now the use of a sequalize promise for searching a list of
// objects associated to the above list
permissionModel(hook.app).findAll({
where: {
id: {
$in: inIds
}
}
}).then(function (plist) {
if (plist.length !== inIds.length) {
throw Error('You must provide the permission List');
} else {
hook.data.inIds = inIds;
return Promise.resolve(hook);
}
}, function (err) {
throw err;
});
}
return fnCreateGroup(hook.data);
};
};
Я прокомментировал строки, которые обрабатывают некоторую информацию других параметров для заполнения inIds
массив. Я также использовал поисковый запрос sequalize для объектов, связанных с информацией, хранящейся в массиве.
Этот блок внутри then
блок выполняется в фоновом режиме. На консоли перья показаны результаты
Тем не менее, данные были вставлены в базу данных.
Как я могу вернуть данные из обещания, выполненного внутри перехвата feathersjs?
1 ответ
Ваш fnCreateGroup
ничего не возвращает. Ты должен return permissionModel(hook.app).findAll
, В качестве альтернативы, если вы используете Node 8+, async/await сделает это намного проще:
const permissionModel = require('./../../models/user-group.model');
module.exports = function (options = {}) {
return async function usergroupBefore(hook) {
let inIds = [];
// the code in this block is for populating the inIds array
if (inIds.length === 0) {
throw Error('You must provide the permission List');
}
//now the use of a sequalize promise for searching a list of
// objects associated to the above list
const plist = await permissionModel(hook.app).findAll({
where: {
id: {
$in: inIds
}
}
});
if (plist.length !== inIds.length) {
throw Error('You must provide the permission List');
} else {
hook.data.inIds = inIds;
}
return hook;
};
};