use q, and fix compose.js first