use event emitters for async nano operations

I commented the code on the PR