我正在努力理解一种实践,我现在在不同的代码库中注意到函数离开了未解决的辅助异步函数调用。
我认为这样做可能是为了节省性能,因为等待承诺被解决可能会增加额外的开销,而没有真正的好处(如果承诺对函数的结果不重要),除了保证一切都已经完成。
我经常看到的一个常见例子是缓存。
在上面的例子中,我是否正确地假设存在这样一种情况,即在
如果我将
但是
假设对
我认为这样做可能是为了节省性能,因为等待承诺被解决可能会增加额外的开销,而没有真正的好处(如果承诺对函数的结果不重要),除了保证一切都已经完成。
我经常看到的一个常见例子是缓存。
async function someFunction() {
const result = await doSomething();
cacheResult(result);
return result;
}
async function cacheResult(someValue) {
// ... cache logic returning a promise
}
在上面的例子中,我是否正确地假设存在这样一种情况,即在
cacheResult
被解析之前,someFunction
已经完成了?如果是这样,那么我假设cacheResult
将在“稍后的某个任意时间”解析?如果我将
someFunction
包裹在一个try/catch
块中,会发生什么呢?try {
await someFunction();
} catch (error) {
// ... error handling
}
但是
cacheResult
的promise在稍后会解析为拒绝。即使我将其包裹在try/catch
中,这会导致未处理的promise拒绝并终止进程吗?假设对
cacheResult
进行了适当的错误处理,并且它是一个耗时较长的复杂函数,那么将其解析为拒绝并继续处理以不损失性能是一种有效的做法吗?