support multi level deep `then()` chains