Await 只允许在异步函数中使用 - webpack、redux thunk

步行者1

所以我试图在 webpack 中使用 redux thunk 进行异步调用,但收到一条奇怪的消息 - 'await' 只允许在异步函数中和模块的顶层

export const createPost = (post) => async => (dispatch) => {
  try {
    const { data } = await api.createPost(post);

    dispatch({ type: "CREATE", payload: data })
  } catch(error) {
    console.log(error.message)
  }
}

初始 webpack 配置

const path = require("path");

module.exports = {
  devServer: {
    contentBase: path.resolve(__dirname, "./src"),
    historyApiFallback: true,
  },
  entry: [
    "regenerator-runtime/runtime",
    path.resolve(__dirname, "./src/index.js"),
  ],
  module: {
    rules: [
      {
        test: /\.js?$/,
        exclude: /node_module/,
        use: "babel-loader",
      },
      {
        test: /\.css?$/,
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.(png|j?g|svg|gif)?$/,
        use: "file-loader",
      },
    ],
  },
  output: {
    filename: "bundle.js",
  },
};

我试图通过添加插件“@babel/plugin-syntax-top-level-await”来更改 webpack 配置以对其进行排序,但现在它给了我一个不同的错误,我认为我没有正确添加它。应该更新加载器以允许通过 module.rules 中的加载器选项传递选项。在加载器更新之前,可以使用 LoaderOptionsPlugin 将这些选项传递给加载器: plugins: [

new webpack.LoaderOptionsPlugin({
// test: /\.xxx$/, // may apply this only for some modules
         options: {
           experiments: …
         }
       })
     ]
const path = require("path");

module.exports = {
  devServer: {
    contentBase: path.resolve(__dirname, "./src"),
    historyApiFallback: true,
  },
  entry: [
    "regenerator-runtime/runtime",
    path.resolve(__dirname, "./src/index.js"),
  ],
  experiments: {
    topLevelAwait: true,
  },
  module: {
    rules: [
      {
        test: /\.(js|mjs|jsx|ts|tsx)$/,
        exclude: /node_module/,
        use: {
          loader: "babel-loader",
          options: {
            plugins: ["@babel/plugin-syntax-top-level-await"],
          },
        },
      },
      {
        test: /\.css?$/,
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.(png|j?g|svg|gif)?$/,
        use: "file-loader",
      },
    ],
  },
  output: {
    filename: "bundle.js",
  },
};

达克斯--

我认为您声明函数的方式存在问题,这就是您所拥有的:

export const createPost = (post) => async => (dispatch) => { 
 ...
}

我认为你需要的是

export const createPost = post => async (dispatch) => {
 ...
}

问题是实际执行异步操作的函数是这样的:

(dispatch) => { }

但是您将 async 关键字放在上一级的包装箭头函数上:

async => (dispatch) => { ... }

我还没有看过你的 webpack 配置,所以不确定那里是否也有问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在ES6生成器上使用redux-saga与在ES2017 async / await中使用redux-thunk的优缺点

如何在redux-thunk中使用axios / AJAX

与将常规函数用作异步操作创建者相比,在redux中使用thunk中间件有什么好处?

为什么函数从不叫redux thunk

如何分派Action或ThunkAction(在TypeScript中使用redux-thunk)?

如何使用redux-thunk`bindActionCreators`

如何使用Redux Thunk链接动态系列的异步操作?

使用redux-thunk和redux-observable

Redux thunk:等待异步函数分派

使用Redux Thunk和await / async语法调度多个操作以跟踪加载

如何通过新的js async / await语法使用redux-thunk中间件异步操作

关于不使用中间件的Redux异步(redux-thunk,redux-saga ...)

什么时候应该使用Redux Saga代替Redux Thunk,什么时候应该使用Redux Thunk代替Redux Saga?

TypeScript中的Redux Thunk

Redux thunk-嵌套调度的函数/动作

如何在Redux Toolkit的createSlice中使用Redux-Thunk?

Redux Thunk和异步操作

什么时候使用redux saga和redux thunk?

Redux Thunk-异步,与Promises链接的动作

Redux Thunk 如何实现

Redux-thunk 异步调用和状态

使用 react native 和 redux 进行异步调用,thunk

Redux Thunk 共享异步对象

如何使用 Jest Mock 模块测试 Redux Thunk 异步操作

异步 redux thunk 需要 wrapoer 功能

Redux Thunk : redux thunk 不分派动作

使用 redux thunk 进行异步 api 获取

相當於在 Redux thunk 中使用 Redux Saga 的 yield

如何使用 Redux Thunk 和 Redux Toolkit 进行发布请求