private void ResolveOrReject(Reaction reaction)
 {
     if (reaction.Chain != null)
     {
         reaction.Chain.ResolveOrReject(new object[] { result }, state);
     }
     else if (reaction.Action != null && reaction.State == state)
     {
         reaction.Action(result);
     }
     else if (reaction.Callback == null || reaction.State != state)
     {
         // Do nothing.
     }
     else if (result == Undefined.Value)
     {
         reaction.Callback.Engine.AddPendingCallback(reaction.Callback, reaction.Callback.Engine.Global);
     }
     else
     {
         reaction.Callback.Engine.AddPendingCallback(reaction.Callback, reaction.Callback.Engine.Global, result);
     }
 }