This function receives a component that has already been associated with an element via a previous call to `initialize` and updates this element by calling `render` on the component.  When called in normal circumstances, it uses the scheduler to defer this update until the next animation frame, and will only perform one update of a given component in a given frame. This means you can call `update` repeatedly in a given tick without causing redundant updates.  If this function called during another synchronous update (for example, as a result of a call to `update` on a child component), the update is performed synchronously.  Returns a promise that will resolve when the requested update has been completed.
function update (component, replaceNode=true) {
  if (syncUpdatesInProgressCounter > 0) {
    updateSync(component, replaceNode)
    return Promise.resolve()
  }

  let scheduler = getScheduler()

  if (!componentsWithPendingUpdates.has(component)) {
    componentsWithPendingUpdates.add(component)
    scheduler.updateDocument(function () {
      componentsWithPendingUpdates.delete(component)
      updateSync(component, replaceNode)
    })
  }

  return scheduler.getNextUpdatePromise()
}