Бесконечная проблема с перетаскиванием в Firefox

Менее суровый поворот на «Mutable contextual state»

Использование объекта с локальным охватом для сбора промежуточных результатов в цепочке обещаний является разумным подходом к заданному вами вопросу. Рассмотрим следующий фрагмент:

function getExample(){
    //locally scoped
    const results = {};
    return promiseA(...).then(function(resultA){
        results.a = resultA;
        return promiseB(...);
    }).then(function(resultB){
        results.b = resultB;
        return promiseC(...);
    }).then(function(resultC){
        //Resolve with composite of all promises
        return Promise.resolve(results.a + results.b + resultC);
    }).catch(function(error){
        return Promise.reject(error);
    });
}
  • Глобальные переменные являются плохими, поэтому в этом решении используется локально ограниченная переменная, которая не наносит вреда. Он доступен только внутри функции.
  • Мутируемое состояние уродливое, но это не мутирует состояние уродливо. Уродливое изменчивое состояние традиционно относится к модификации состояния аргументов функции или глобальных переменных, но этот подход просто изменяет состояние переменной локального охвата, которая существует с единственной целью агрегирования результатов обещания ... переменная, которая умрет простой смертью
  • Промежуточные обещания не препятствуют доступу к состоянию объекта результатов, но это не приводит к некоторому страшному сценарию, когда одно из обещаний в цепочке будет изгонять и саботировать ваши результаты. Ответственность за установку значений на каждом шаге обещания ограничивается этой функцией, и общий результат будет либо правильным, либо неправильным ... это не будет какой-то ошибкой, которая возникнет спустя годы в производстве (если вы не намерены ее !) [/ ​​g3]
  • Это не приводит к сценарию условий гонки, который возникает из-за параллельного вызова, потому что для каждого вызова функции getExample создается новый экземпляр переменной результатов.
2
задан Allan Jebaraj 8 April 2019 в 09:19
поделиться