如何让TypeScript函数中的返回等待超时操作完成?
问题解决:让Promise等待超时逻辑完成
你的代码核心问题是setTimeout是异步执行的,但函数没有等待它内部的逻辑完成就直接返回了Promise,这时候latitude和longitude还没被赋值,所以返回的数据是空的。要解决这个问题,需要把超时逻辑包装成可等待的Promise,确保所有异步操作完成后再返回结果。
关键修改点:
- 将
setTimeout包装为Promise,用await等待1秒延迟 - 移除不必要的外层
new Promise,因为async函数本身就会返回Promise,直接return结果即可 - 优化异步逻辑写法,用
await替代嵌套的then链,提升代码可读性 - 确保所有操作(获取纬度、获取经度、退出driver)完成后再返回坐标
修正后的代码:
export default async function scrapper(city: string): Promise<Coords> { const driver = openDriver(); // 等待1秒 await new Promise(resolve => setTimeout(resolve, 1000)); // 按顺序执行异步操作 const latitude = await driver.findLatitude(city); const longitude = await driver.findLongitude(city); await driver.quit(); // 返回最终结果 return { lat: latitude, long: longitude }; }
额外优化(可选):
如果findLatitude和findLongitude这两个方法互相不依赖,可以用Promise.all并行执行,减少总耗时:
export default async function scrapper(city: string): Promise<Coords> { const driver = openDriver(); await new Promise(resolve => setTimeout(resolve, 1000)); // 并行获取经纬度 const [latitude, longitude] = await Promise.all([ driver.findLatitude(city), driver.findLongitude(city) ]); await driver.quit(); return { lat: latitude, long: longitude }; }
内容的提问来源于stack exchange,提问作者Josep
相关产品推荐
相关产品推荐

