Javascript 主干收集。创建和承诺
我目前正在实现一个采购订单类型视图。其中,我有一个PurchaseOrder表和一个PurchaseOrderLine表用于项目。当用户按下保存按钮时,我首先保存采购订单,然后检索PurchaseOrderID并保存到每个PurchaseOrder项目。问题如下:Javascript 主干收集。创建和承诺,javascript,jquery,backbone.js,promise,Javascript,Jquery,Backbone.js,Promise,我目前正在实现一个采购订单类型视图。其中,我有一个PurchaseOrder表和一个PurchaseOrderLine表用于项目。当用户按下保存按钮时,我首先保存采购订单,然后检索PurchaseOrderID并保存到每个PurchaseOrder项目。问题如下: Promise.resolve( app.PurchaseOrder.create(formData) ).then(function(response){ purchaseOrderID = resp
Promise.resolve( app.PurchaseOrder.create(formData) ).then(function(response){
purchaseOrderID = response.collection.models[0].attributes.id;
for(var key in formLineData){
if(formLineData.hasOwnProperty(key)){
formLineData[key]['requestID'] = purchaseOrderID;
app.PurchaseOrderLines.create(formLineData[key]);
}
}
}).catch(function(error){
console.log(error);
})
formData是PurchaseOrder数据,formLineData是PurchaseOrderLine数据(我执行for循环将RequestId插入所有项目)
我之所以使用承诺,是因为collection.fetch不会在主干上返回承诺(我认为我的实现不太正确,因为Promise.resolve()用于使该表成为承诺,而在本例中不是)。问题是,当单击保存按钮时,即使尚未创建采购订单,零件也会通过。因此,当它到达PurchaseOrderLine.create时,所有项目都会在没有PurchaseOrderID的情况下保存。我有两个选择:
请你解释一下这个话题 你可以试试这样的东西
app.PurchaseOrder.create(formData)。然后(函数(响应){
var purchaseOrderID=response.collection.models[0].attributes.id;
返回新承诺(异步函数(解析){
for(formLineData中的var键){
if(formLineData.hasOwnProperty(键)){
formLineData[key][“requestID”]=purchaseOrderID;
等待app.PurchaseOrderLines.create(formLineData[key]);
}
}
解决()
});
});
或者用承诺来做类似的事情
Promise.all(formLineData.map(()=>app.PurchaseOrderLines.create(formLineData[key]))
如果then()即使在create中的ajax调用未完成时也会触发,我建议app.PurchaseOrder.create()不返回承诺。非承诺对象被视为已解析。fetch确实返回承诺对象。我没有使用fetch,首先您应该更新您的问题,以澄清您的问题不是与fetch
有关<代码>创建立即返回创建的模型。如果您想等待服务器将创建的模型添加到集合中,然后执行某项操作,请传递{wait:true}
已更正该问题。