You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:35:49