async singleton javascript