首页 > 解决方案 > 使用 setTimeout 函数,该函数从 redux 分派一个动作并通过 fetch 调用解决一个承诺链

问题描述

正如标题所说,我遇到了一些关于承诺的有趣问题。所以我有一个用方法导出对象的文件,这个函数获取 2 个值并返回一个 setTimeout。该函数获取一个 redux 操作(函数调度)和一个 setTimeout 的值。问题是当我想进行 fetch 调用,然后当 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(() => {
        new Promise(resolve => resolve(products)).then((data)=> cb(data))
    }, timeout || TIMEOUT),
}

感谢所有试图提供帮助的人

标签: javascriptreactjsredux

解决方案


default export的很难阅读,可能有问题。尝试声明一个 const 并导出它。

此外,您的Promise逻辑没有意义或意义不大:一旦timeout通过了毫秒,创建一个Promise自动解析为指向函数的指针products,然后cb将该函数作为参数调用。

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

// Helper function to promisify setTimeout
const delay = (millis) => new Promise( resolve => setTimeout(resolve, millis));

// Use default argument value
const TIMEOUT = 100;
const getProducts = async (cb, timeout=TIMEOUT) => {
  await delay(timeout);
  const data = await products();
  cb(data);
}

export default getProducts

推荐阅读