Nexedi / OfficeJS JavaScript Coding Crimes

[out-of-date] Please use individual guidelines.
  • Last Update:2017-04-13
  • Version:001
  • Language:en

This document defines JavaScript Coding Crimes

Table of Contents

  • Related Articles

    A promise not returned takes a wrong turn

    A promise used inside a chain of promise or a queue needs to be return to ensure synchronous code

    Good Example:

    function promiseA() {
      // Sleep / Delay for 1 second 
      return new RSVP.Queue()
        .push(function () {
          return RSVP.delay(1000)
        })
        .push(function () {
          console.log("promiseA is finished")
          return;
        });
    } 
    
    new RSVP.Queue()
      .push(function() {
        return promiseA()
      })
      .push(function() {
        console.log("Finished")
      })
    
    >> promiseA is finishes
    >> Finished

    Bad Example:

    function promiseA() {
      // Sleep / Delay for 1 second 
      return new RSVP.Queue()
        .push(function () {
          return RSVP.delay(1000)
        })
        .push(function () {
          console.log("promiseA is finished")
          return;
        });
    }
    
    new RSVP.Queue()
      .push(function() {
         promiseA()
       }
      .push(function() {
         console.log("Finished")
       })
    
    >> Finished
    >> promiseA is finished

    Do not chain promises, Queue them: No "then", No "fail"

    Chained promises do not support cancellation, unless specified. This is why queue should be used in order to avoid ghost Promises.

    Good Example:

    function promiseA() {
      // Sleep / Delay for 1 second
      return new RSVP.Queue()
        .push(function() {
          return RSVP.resolve()
        })
        .push(function () {
          console.log("I'm a ghost Promise");
        }, function (e) {
          console.log(e);
        });
    }
    promiseA().cancel()

    Bad Example:

    function promiseA() {
      // Sleep / Delay for 1 second
      return RSVP.resolve()
        .then(function () {
          console.log("I'm a ghost Promise");
        })
        .fail(function (e) {
          console.log(e);
        });
    }
    promiseA().cancel()
    
    >> I'm a ghost Promise

    Related Articles