Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从承诺结果返回React元素?_Javascript_Arrays_Reactjs - Fatal编程技术网

Javascript 如何从承诺结果返回React元素?

Javascript 如何从承诺结果返回React元素?,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我有一个顺序数组,希望在数组中循环并调用一个异步函数来检查每个顺序,然后在dom中呈现该数组。dow是我的代码 我尝试在映射之外创建一个数组,并将有效命令推送到该数组,但当我记录该数组时,它是空的 renderTrades = () => { const { trades } = this.props; const contractWrappers = new ContractWrappers(web3Wrapper._provider, { networkId: KOVA

我有一个顺序数组,希望在数组中循环并调用一个异步函数来检查每个顺序,然后在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之前,请等待您的所有承诺得到解决

// 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);
})

有关Promise的详细描述和示例,请参见。所有可能的副本都必须使用@JaredSmith之类的工具。您能为我的情况提供一个示例吗?这似乎是正确的答案,但如果在React render函数中调用该函数,则该函数可能无法工作。异步渲染对我们大多数人来说还不是一件事@Apolo我使用该函数将命令设置为状态,并在渲染内部使用状态,但它有时有效,有时无效。我正在使用NextJs进行服务器端渲染。这是一种竞争条件,react render在返回其标记之前不会等待承诺解决。现在,任何异步操作都应该在componentDidMount内部完成,您可能希望显示一个加载程序,直到这些操作完成