为什么 TypeScript 不强制执行 async/await 承诺?
Why doesn't TypeScript enforce async/await on promise?
我有以下代码。 performAsyncAction
执行异步操作,returns Promise<Response>
。在 someFunction
中,我很惊讶 TypeScript 没有警告 not 在 returns 承诺的函数上使用 await。
function performAsyncAction() {
return fetch('someservice');
}
function someFunction() {
const result = performAsyncAction(); // Was expecting typescript to give error here
}
我找到了可能有帮助的相关 linting 规则 promise-function-async
这不是错误,这是预期的行为。
- Promise 早在 async/await 之前就存在了,您有多种方式来处理它们
- Awaiting promise是函数的内部逻辑,不是需求
- Typescript 很清楚你有 Promise 而不是 Promise 中的值,所以如果你想以错误的方式使用它,它会警告你
- 您提供的功能不是
async
,所以根本无法等待
- await/async和Promise在Javascript中是一回事,你
await
Promise还是.then
Promise都没有关系,它只是语法糖(虽然有用)
- 很多情况下你不想等待新创建的Promise,即允许一次处理多个Promise,从而减少处理请求的时间
我完全同意你的看法。根据我的经验,忘记等待承诺是大多数问题的根源,尤其是处理错误时。
虽然 await/async
语法存在于纯 JS 中,但引入另一种语法糖将非常有意义,它会通知 TS 编译器您打算将承诺留给 运行 'in-the-background' .
与任何其他严格检查一样,这将是可选的。
例如
async function someFunction() {
const result = performAsyncAction(); // Compilation error
}
async function someFunction() {
const result = along performAsyncAction(); // Returns promise
}
async function someFunction() {
const result = await performAsyncAction(); // Awaits the promise
}
我有以下代码。 performAsyncAction
执行异步操作,returns Promise<Response>
。在 someFunction
中,我很惊讶 TypeScript 没有警告 not 在 returns 承诺的函数上使用 await。
function performAsyncAction() {
return fetch('someservice');
}
function someFunction() {
const result = performAsyncAction(); // Was expecting typescript to give error here
}
我找到了可能有帮助的相关 linting 规则 promise-function-async
这不是错误,这是预期的行为。
- Promise 早在 async/await 之前就存在了,您有多种方式来处理它们
- Awaiting promise是函数的内部逻辑,不是需求
- Typescript 很清楚你有 Promise 而不是 Promise 中的值,所以如果你想以错误的方式使用它,它会警告你
- 您提供的功能不是
async
,所以根本无法等待 - await/async和Promise在Javascript中是一回事,你
await
Promise还是.then
Promise都没有关系,它只是语法糖(虽然有用) - 很多情况下你不想等待新创建的Promise,即允许一次处理多个Promise,从而减少处理请求的时间
我完全同意你的看法。根据我的经验,忘记等待承诺是大多数问题的根源,尤其是处理错误时。
虽然 await/async
语法存在于纯 JS 中,但引入另一种语法糖将非常有意义,它会通知 TS 编译器您打算将承诺留给 运行 'in-the-background' .
与任何其他严格检查一样,这将是可选的。
例如
async function someFunction() {
const result = performAsyncAction(); // Compilation error
}
async function someFunction() {
const result = along performAsyncAction(); // Returns promise
}
async function someFunction() {
const result = await performAsyncAction(); // Awaits the promise
}