microsoft / microsoft/TypeScript
Suggestion: add flag to notify when awaiting a non-promise
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
Search Terms
async promise force error
Suggestion
Add a tsconfig.json flag to display info/warning/error when awaiting non-PromiseLike code. This will catch developer errors.
Use Cases
Catch developer errors when writing async code.
Example
The following code is valid:
await Promise.all(urls.map(url => {
fetch(url);
});
console.log('fetching complete');
The developer intends to do something once all the fetches complete, but since map is not returning any value, it ends up awaiting [undefined, undefined, ...], which means fetching complete is logged before the fetches complete. It would be nice if TS gave an info/warning/error in this case.
The correct code is:
await Promise.all(urls.map(url => {
return fetch(url);
});
console.log('fetching complete');
This example is paired down to the bare minimum for simplicity, but IRL code is more complex.
Checklist
My suggestion meets these guidelines:
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
- This feature would agree with the rest of TypeScript's Design Goals.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Dado que en el issue no se identifica ningún archivo fuente ni ninguna prueba, empieza por localizar el tratamiento de las expresiones await en TypeScript y de los diagnósticos de tsconfig. La tarea estará terminada cuando se haya definido e implementado un info, warning o error configurable para hacer await sobre código que no sea PromiseLike, con cobertura para el ejemplo proporcionado de Promise.all.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript
- Área
- compilers
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100