Задать вопрос

OnBefore, OnAfter в Lodash?

Всем привет. Появилась необходимость сделать такие колбэки в опциях модуля. Необходимо что бы пользователь сам мог дописать часть кода перед выводом функции и после нее, но никак не пойму как это сделать. Написал модуль в lodash например есть функция:
function _onClickRemoveFromCart() {
        $('body').on('click', opts.item, function(e) {
               var $this = $(this),
                id = +$this.attr(opts.attrId),
                $element = findElemendById(id);
//тут должен быть вызов функции onbefore
            remove(id);
            $element.remove();
//а тут уже onafter
            renderItems();
        });
    }


Пробовал вызывать функцию внутри: opts.onBefore($element)
Но все происходит асинхронно т.е код после функции начинает выполнятся еще до окончания кода в onBefore. Как сделать что бы код выполнялся последовательно на этом участке?
Спасибо.
  • Вопрос задан
  • 142 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
AMar4enko
@AMar4enko
код после функции начинает выполнятся еще до окончания кода в onBefore

Если у вас в onBefore асинхронщина, то почему вы ожидаете завершения onBefore перед выполнением $element.remove();
// Вариант с callback-функцией
function onBefore(completed) {
  setTimeout(completed, 1000);
}

function onAfter(completed) {
  setTimeout(completed, 2000);
}
// ...
onBefore(function() {
  remove(id);
  $element.remove();
  onAfter(function() {
    renderItems();
  });
});


Но это, конечно, грязь. Используйте промисы:
var resolveImmediately =Promise.resolve.bind(Promise); 
    // ...
    (onBefore || resolveImmediately)()
      .then(function() {
        remove(id);
        $element.remove(); 
      })   
      .then(onAfter || resolveImmediately)
      .then(function() {
        renderItems();
      });
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vshvydky
function name (fn1, fn2){
код код код
fn1();
код код код
fn2();
код код код
}

оно?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы