add When.js

add asynchronous callback chain