implmented node-promise