why `setTimeout` without the second argument instead of just using `setImmediate`?