【问题标题】:The response object not assign to the variable REDUX-SAGA响应对象未分配给变量 REDUX-SAGA
【发布时间】:2021-06-28 09:15:06
【问题描述】:

后端的响应有问题。

我使用 mongoose 删除了具有特定 _id 的项目。

create 方法运行良好,我可以获取值响应并将其分配给变量。

删除也很好,但我无法获得响应值来将响应分配给变量const post

function* deletePostSaga(action) {
  try {
    console.log("_id: ", action.payload);
    const post = yield call(api.deletePost, action.payload);
    console.log("Post - Delete: ", post);
    yield put(actions.deletePost.deletePostSuccess(post));
  } catch (err) {
    console.error(err);
    yield put(actions.deletePost.deletePostFailure(err));
  }
}

api.deletePost:

import axios from "axios";

export const fetchPosts = () => axios.get(`/posts`);

export const createPost = (payload) => axios.post(`/posts`, payload);

export const updatePost = (payload) => axios.put("/posts", { data: payload });

export const deletePost = (payload) => {
  console.log(payload);
  axios.delete(`/posts`, { data: payload });
};

该项目被删除,我从 devtool 检查网络并检查预览,我还得到了响应对象:

message: "Delete successfully"
post: {author: "Anonymous", likeCount: 0, _id: "60d99146df51c152f189b1c4", title: "123", content: "123",…}
attachment: ""
author: "Anonymous"
content: "123"
createdAt: "2021-06-28T09:07:18.178Z"
likeCount: 0
title: "123"
updatedAt: "2021-06-28T09:07:18.178Z"
__v: 0
_id: "60d99146df51c152f189b1c4"
success: true

只是不知道为什么我不能将响应分配给const post 变量,它只是显示为undefined。 感谢阅读。

【问题讨论】:

  • 请显示deletePost
  • 对不起,我忘记了重要的
  • 您需要从deletePost返回数据
  • 哦,你是对的,我把 return 放在 axios.delete 之前,它返回值谢谢@AshwinR

标签: node.js reactjs mongoose redux-saga


【解决方案1】:
deletePost = async (payload) => {
    console.log(payload);
    const response = await axios.delete(`/posts`, { data: payload });
    return response;
};

使用async 关键字时,您需要使用await 才能进行阻塞调用。

【讨论】:

    【解决方案2】:

    您需要更新 deletePost 以从 axios 返回值。你可以像这样使用async await

    deletePost = async (payload) => {
      console.log(payload);
      const response = await axios.delete(`/posts`, { data: payload });
      return response
    };
    

    【讨论】:

    • 这将返回一个未决的承诺。您不会收到回复。
    • @AshwinR 在这种情况下,这并不重要,无论如何都会返回一个承诺。事实上,让函数异步在这里除了让它更冗长之外没有任何作用。
    • @AsafAviv 是的。它不会抛出任何错误。但它绝对不会给你想要的回应。
    • @AshwinR 究竟如何?您必须调用 .then 或在调用此函数时使用 await
    • @AsafAviv 是的。上面的答案既没有 .then 也没有 await。所以你不会得到想要的结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 2016-04-20
    • 2018-12-30
    • 2016-12-14
    • 2011-04-23
    • 2020-05-19
    相关资源
    最近更新 更多