See the logs in console.

Issue 1:
This is the dojo AMD loader(require) async test.
Click on "test require success" button to test require success.
Click on "test require error" button to test require error and process require error.
Click on "test require error" button again, the console output nothing, but the expect is output error again like before.


Issue 2:
This is the dojo AMD loader(require) sync test. Please modify dojoConfig.async=false first.
Click on "test require sync success" button to test require plugin success.
Click on "test require sync error" button to test require plugin error and process require error.
You can see the 404 Not Found error and catch in require output.
This error is catched in catch statement, but not trigger require.on("error"). Not sure this is a defect of dojo AMD loader, but seems an error should trigger require.on("error")


Issue 3:
This is the dojo AMD loader plugin(dojo/text) test.
Click on "test require plugin success" button to test require plugin success.
Click on "test require plugin error" button to test require plugin error and process require error.
You can see xhr plugin throw Unable to load ./requireerror.html status:404 error, but require.on("error") not be triggered as expect.
In fact, require.on("error") is triggered by "timeout" error event after 30 seconds.


Issue 4:
require not exist module test.
This test is the same as issue 1. require a not exist module more than one times will cause the require waiting list increament, and each new require will check the waiting list. If the waiting list is too big, the require perform is very low. Click on "100", "1000", "10000" and "100000" button to test. You can see require a not exist module 10000 times is cannot tolerant, the browser almost crush when require 100000 times.