ReactJS 从 Promise 中获取结果

Posted

技术标签:

【中文标题】ReactJS 从 Promise 中获取结果【英文标题】:ReactJS getting results from a Promise 【发布时间】:2021-12-28 14:16:25 【问题描述】:

在我的 sagas 中,我将用户凭据发送到后端

const request = client.post('api/JwtAuth/GenerateToken', UserName: action.username, Password: action.password)
console.log(request) 

客户端看起来像这样

从“axios”导入axios

const client = axios.create(
    baseURL: 'https://localhost:5001/',
    timeout: 600000000000,
    headers: 
        ContentType: 'application/json'
    
)

export default client

【问题讨论】:

【参考方案1】:

你的问题是什么?如果问题是你为什么在控制台上看到 Promise?那是因为你正在处理承诺,要么使用 .then

client.post().then(res => console.log(res.data)).catch(err => console.log(err))

或异步等待语法

await client.post()

【讨论】:

我一直使用 await 但我的函数不喜欢它,因为我声明它像 function *fetchUser(action) 呃,比使用 Promise.then() 更适合你的情况 我需要内联做所有事情吗?似乎我在我的 .then() 语句中添加了逻辑,例如从数据中提取值到变量中,然后在数据为空/未定义时管理异常。 不,没有必要。 .then(res => ) 语句用于处理当/如果承诺被解决时的情况。通常,在前端应用程序中,您使用 res 参数来更新状态或向 UI 呈现新内容。您使用 catch 来处理错误。如果您担心代码的样式,可以在新行上写 .then().catch(),如下所示:dcv19h61vib2d.cloudfront.net/thumbs/…【参考方案2】:
  const request = client.post('api/JwtAuth/GenerateToken', UserName: 
    action.username, Password: action.password)

  request.then(response => 
    // the response body can be accessed through the "data" property
    console.log(response.data)
  )
  console.log(request) 

更新:

你是在传奇中这样做的,对吧? 如果是这样,获取请求响应数据的最佳方法是使用call 效果。从redux-saga/effects 导入,得到如下响应:

  const response = yield call(
    client.post,
    'api/JwtAuth/GenerateToken',
     UserName: action.username, Password: action.password 
  )

  console.log(response.data)

【讨论】:

以上是关于ReactJS 从 Promise 中获取结果的主要内容,如果未能解决你的问题,请参考以下文章

ES6 promise的用法

Promise.all()使用方法

c++中的异步编程——future,promise

如何在 Promise 中获取数据数组 [重复]

Reactjs 通过 Fluxible 从商店获取事件

Promise