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

使用setTimeout触发Redux Action结合Fetch处理Promise链遇问题

解决Promise与setTimeout结合的异步执行问题

我看你现在的代码里有个关键问题:你把products这个async函数直接传给了resolve,但async函数本身是一个函数,不是它执行后返回的Promise结果。咱们一步步来修正:

首先,先看修正后的完整代码:

const products = async () => { 
  const response = await fetch('http://localhost:3009/products'); 
  const data = await response.json(); 
  return data 
}
const TIMEOUT = 100

export default {
  getProducts: (cb, timeout) => setTimeout(async () => {
    // 直接调用products()获取它返回的Promise
    const data = await products();
    cb(data);
  }, timeout || TIMEOUT),
}

具体的修改点和原因:

  • 把setTimeout里的回调改成async函数,这样就能直接用await来等待products的异步结果,比嵌套then更简洁易读。
  • 之前的new Promise(resolve => resolve(products))完全没必要,因为products()本身就返回一个Promise,直接调用它并用await接收结果即可。
  • 如果你更习惯用.then()的写法,也可以改成这样:
getProducts: (cb, timeout) => setTimeout(() => {
  products().then(data => cb(data));
}, timeout || TIMEOUT),

这样就能保证:先等待指定的超时时间,然后发起fetch请求,等请求完成拿到数据后,再调用传入的Redux action(cb函数)。

内容的提问来源于stack exchange,提问作者Tal Talmon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:23:13