Nano Hash - криптовалюты, майнинг, программирование

Использование перенаправления в цепочку обещаний

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

Вот код:

myfunc = function() {
  return PromiseCall1()

  .then(function(data){
    if (condition){
      $location.path(some_url); // This is a redirection with AngularJS

    } else {
      return PromiseCall2();
    }
  })

  .then(function(data){
    return PromiseCall3();
  })

  .then(function(data){
    // Some other stuff here
  })

};

Ожидаемое поведение:

  • PromiseCall1() должен быть вызван
  • если condition истинно, никакие другие промисы не должны вызываться, просто выполните перенаправление
  • если condition ложно, необходимо вызвать Promise2, а затем Promise3.

Как бы вы это сделали? Спасибо за помощь.


  • Я бы создал еще один объект обещания в области myFunc. И в каждой цепочке проверяйте, если она не разрешена, продолжайте выполнение, если разрешена, просто вернитесь из вашего обработчика then. И когда вы перенаправляете, вы можете просто выполнить обещание, которое заставит все обработчики вернуться. 24.04.2014

Ответы:


1

Решение Петки в порядке. Если хочешь. Это возможно, если вы оберните свои обработчики then с помощью Maybe.

Что-то вроде:

var maybe = function(fn){
     return function(value){
          if(value === maybe.Nothing) return maybe.Nothing;
          return fn.apply(this,arguments);
     };
});
maybe.Nothing = {}; // unique reference

Что позволит вам сделать

Promise.try(function(){
    return 15;
}).then(maybe(function(val){
    console.log("got",val);    
    return maybe.Nothing;
})).then(maybe(function(val){
    console.log("This never gets called");  
}));

Это дает вам явный хук значения, чтобы сигнализировать о том, что не следует продолжать какое-либо обещание в цепочке, обернутой с помощью возможного.

24.04.2014
  • Спасибо за эту альтернативу. Я посмотрю, когда мое понимание обещаний станет лучше. 24.04.2014

  • 2
  • Да, судя по моим выводам, этот подход, вероятно, ваш лучший выбор. 24.04.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..