Reactjs React.js,如何将映射和异步函数与setState回调一起使用?
在我的React应用程序中,我需要为地图结果中的每条记录依次调用2个不同的函数 通过调用函数getOrderLine()并考虑记录的数量,我想为映射结果中的每个记录依次调用函数getItemInfo()和createOrderLine()。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
下面代码的预期行为如下(我们假设有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。