FeathersJS - Куда цеплять крючки?

У меня была функция, которая выполняла три разные задачи, которые работали нормально. Для лучшего повторного использования я попытался разделить их на три независимых крючка. Они выглядят так:

module.exports = function(options = {}) {
  return function hookFunction(hook) {
  //do stuff and set variables
  function(hook.params.var){ ... } // only in second and third
  hook.params.var = var;           // only in first and second
    return Promise.resolve(hook);
  };
}; 

Мой файл service.hook содержит это:

module.exports = {
  before: {
    find: [ firstHook(), secondHook(), thirdHook() ]}}

Теперь кажется, что они работают одновременно, из-за чего третий выдает ошибку, вызванную отсутствием данных из первого и второго. Я хочу, чтобы они бежали один за другим. Как я мог этого добиться?

(Я пробовал использовать .then в service.hook, но он выдает TypeError: hookFunction(...).then is not a function.)

Я прочитал Как запускать синхронные перехватчики на fersjs, но я не Не совсем знаете, где разместить цепочку - в третий крючок, в сервисный крючок или где-то еще?


person Kinaeh    schedule 01.02.2018    source источник


Ответы (1)


Хуки будут запускаться в том порядке, в котором они зарегистрированы, и если они возвращают обещание (или являются функцией async), он будет ждать выполнения этого обещания. Наиболее распространенная ошибка, если они запускаются одновременно, но должны выполняться последовательно, заключается в том, что не возвращается ни одно обещание или неправильное обещание, но из вашего примера кода не ясно, так ли это. Следующий пример будет работать и ждать каждую секунду по одной секунде, затем распечатать текущее имя и перейти к следующему:

function makeHook(name) {
  return function(context) {
    return new Promise(resolve => {
      setTimeout(() => {
        console.log(`Running ${name}`);
        resolve(context);
      }, 1000);
    });
  }
}
module.exports = {
  before: {
    find: [ makeHook('first'), makeHook('second'), makeHook('third') ]}}
person Daff    schedule 02.02.2018