flattened promise chain