【问题标题】:promise keep return the empty array承诺保持返回空数组
【发布时间】:2020-11-18 03:34:53
【问题描述】:
    constructor() {
    super();
    this.state = {
        detailWallet: [],
        user: [],
        historia: [],
        namaPertama: [],
        namaKirim: [],
    
}

componentDidMount() {
    this.getDetailAPI();
    this.getDetailPlaceAPI();
    this.getHistoria();
}

getNameAPI = () => {
    const id = this.props.match.params.id;
    return new Promise(resolve => {          
        axios.get(`/wallet/user/${id}`)
        .then((result) => {
            resolve(
                this.setState({
                    namaPertama: result.data.data.content[0].user.firstName
                })
            )
        })
    });
}

getHistoria = () => {
    console.log(this.getNameAPI())
    Promise.all([this.getNameAPI()])
    .then(([result]) => {
        this.setState({
            namaKirim: result
        })
    })
    axios.get(`/wallet/type/6?q=`)
    .then((result) => {
        this.setState({
            historia: result.data.data.content
        })
    })
}

所以我创建了一个函数,该函数有一个方法 get 包含在 promise 中,当我在 getHistoria 中 console.log 时,promise 给了我一个空数组..

谁能告诉我我的代码有什么问题?我只是了解承诺,所以我仍然不知道,谢谢..

【问题讨论】:

  • Promise.all([this.getNameAPI()]).then(...) - 为什么不必要的Promise.all() 电话?就做this.getNameAPI().then(...)
  • 然后重新引入Promise.all() 来聚合this.getNameAPI()axios.get() 返回的两个promise。并返回聚合的承诺。
  • @Andreas 我试了一下,但没有任何改变,结果仍然给我一个空数组

标签: javascript reactjs api rest promise


【解决方案1】:

您正在返回 setState 的结果,我认为 setState 没有返回任何内容。此外,setState 是异步的,所以如果你刚刚登录状态,你不会得到更新状态的结果。

只需使用 setState 设置状态并返回一些值。

编辑:

getNameAPI = () => {
    const id = this.props.match.params.id;
    return new Promise(resolve => {          
        axios.get(`/wallet/user/${id}`)
        .then((result) => {
          let value =  result.data.data.content[0].user.firstName;
          this.setState({ namaPertama: value})
          resolve(value)
        })
    });
}

【讨论】:

  • 对不起,你能告诉我怎么做吗?我还是想不通
  • resolve 关键字类似于 return 语句,但对于 Promise,它指示 Promise 是否完成(拒绝)。所以你传递给resolve的值将是promise返回的值。但是在这里你要通过解析,this.setState 的结果,而 setState 没有返回任何东西,它只是设置了状态。请参阅我的帖子的编辑
猜你喜欢
  • 2021-12-26
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 2015-11-04
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
相关资源
最近更新 更多