Как относиться к обещанию внутри крючка пера?

Я хочу проверить данные перед вставкой в ​​базу данных. Путь 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;
  };
};
Другие вопросы по тегам