javascript - 如何从 Promise 结果返回 React 元素?

标签 javascript arrays reactjs

我有一个订单数组,想要在数组内循环并调用异步函数来检查每个订单,然后在 dom.dow 内渲染数组是我的代码

我尝试在映射之外创建一个数组并将有效订单推送到该数组,但是当我记录该数组时其为空

renderTrades = () => {
    const { trades } = this.props;
    const contractWrappers = new ContractWrappers(web3Wrapper._provider, { networkId: KOVAN_NETWORK_ID });
    const _trade = [];
    trades.map((trade, index) => {
        contractWrappers.exchange.getOrderInfoAsync(trade.order)
            .then((val) => {
                if (val.orderStatus == 5) {
                    _trade.push(<TradeRow0x key={index} />);
                }
            });
    });
    return _trade;
};

我想将有效的订单推送到数组并将其渲染到 dom

最佳答案

可以使用 Promise.all() 来实现,在返回所需的 JSX 之前等待所有 promise 得到解决。

// map all of your trades to promises
const tradesPromises = trades.map(trade => contractWrappers.exchange.getOrderInfoAsync(trade.order))

Promise.all(tradesPromises).then(res => {
  // all of your promises have now resolved, so you can return your jsx as required.
  const mappedTrades = res.map((value, index) => {
    return value.orderStatus === 5 ? <TradeRow key={index} /> : null
  })

  // now you will be able to log these out and see what you are 
  // expecting as the promises will all have resolved.
  console.log(mappedTrades);
})

参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all有关 Promise.all

的深入描述和示例

关于javascript - 如何从 Promise 结果返回 React 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54006313/

相关文章:

javascript - PHP 在单选按钮上将单选值发布到下一页

javascript - 下载前通知 Safari 扩展

javascript - v-for 不使用 vue.js 中的 html 元素

c - 如何在C头文件中分配特定的数组大小

javascript - 如果您在 PureComponent 渲染方法中不使用 prop,会有什么不同吗?

reactjs - 创建具有远程排序、分页、过滤功能的表

javascript - 使用 javascript 复制到所有浏览器的剪贴板

php - 将两个数组合并为一个(追加)

javascript - 创建 Javascript 未排序数组对象

reactjs - 功能组件比类组件有更好的性能?