Reactjs React.js,如何将映射和异步函数与setState回调一起使用?

Reactjs React.js,如何将映射和异步函数与setState回调一起使用?,reactjs,promise,async-await,map-function,asynccallback,Reactjs,Promise,Async Await,Map Function,Asynccallback,在我的React应用程序中,我需要为地图结果中的每条记录依次调用2个不同的函数 通过调用函数getOrderLine()并考虑记录的数量,我想为映射结果中的每个记录依次调用函数getItemInfo()和createOrderLine()。 下面代码的预期行为如下(我们假设有2条记录): 1-调用getItemInfo() 2-调用createOrderLine() 3-调用getItemInfo() 4-调用createOrderLine() 但我有一个: 1-调用getItemInfo

在我的React应用程序中,我需要为地图结果中的每条记录依次调用2个不同的函数

通过调用函数getOrderLine()并考虑记录的数量,我想为映射结果中的每个记录依次调用函数getItemInfo()和createOrderLine()。

下面代码的预期行为如下(我们假设有2条记录):

1-调用getItemInfo()
2-调用createOrderLine()
3-调用getItemInfo()
4-调用createOrderLine()

但我有一个:

1-调用getItemInfo()
2-调用getItemInfo()
3-调用createOrderLine()
4-调用createOrderLine()

我尝试使用async和promise,但未能解决问题

下面是源代码,谢谢你的帮助

getOrderLine = () => {

    axios
      .post(
        this.hostname +`getPoLine.p?id=` +  this.id 
      )
      .then(response => {

        response.data.ProDataSet.tt_order_line.map( item=>{
            this.setState({
                quantity: item.quantity,
                price: item.price
            },()=>{this.getItemInfo()})
        })        
    })
  }

getItemInfo = () => {   

    /* some code */
            this.setState({

                order_code: "value 1",
                alloc_qty: 20,
            },()=>{this.createOrderLine()})
}

要按顺序运行所有代码,您需要组成承诺链:

var getOrderLine=()=>{
axios
.post(this.hostname+'getPoLine.p?id='+this.id)
。然后(响应=>{
设i=0
下一个()
函数下一步(err){
如果(错误){
//发生了一个错误
返回
}
if(i>=response.data.ProDataSet.tt\u order\u line.length){
//处理所有行
返回
}
const item=response.data.ProDataSet.tt\u order\u行[i]
我++
这是我的国家({
数量:item.quantity,
价格:item.price
}, () => {
这个文件名为getItemInfo()
.然后(()=>{
return this.createOrderLine()//假设它返回一个承诺
})
.然后(下一个)
.接住(下一个)
})
}
})
}
var getItemInfo=()=>{
返回新承诺(解决=>{
这是我的国家({
订单代码:“值1”,
分配数量:20
},决心)
})
}

为什么需要设置状态?您只是想按顺序调用api吗?您正在循环中调用setState。实际上需要吗?是的,因为getItemInfo()需要getOrderLine函数提供的数量和价格的新值。createOrderLine()还需要order_code和alloc_qty的新值来调用api。