骨干收藏,创造和承诺
Backbone collection.create and promises
我目前正在实现采购订单类型视图。我有一个采购订单表和一个采购订单表的项目。当用户按下保存按钮时,我做的第一件事是首先保存采购订单,然后检索 PurchaseOrderID 并保存到每个单独的采购订单项目。问题如下:
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 Data(我执行 for 循环以向所有项目插入请求 ID)。
我正在使用 Promise,因为collection.fetch 不会在 Backbone 上返回承诺(我认为我的实现不太正确,因为 Promise.resolve() 用于做出承诺,在这种情况下它不是)。问题是,当单击保存按钮时,即使尚未创建PurchaseOrder,也会通过零件。因此,当它到达PurchaseOrderLine.create时,所有项目都会在没有PurchaseOrderID的情况下保存。我有两个选择:
为此添加服务器验证。这样做的问题是每次都会返回错误,这可能会给用户带来麻烦。
添加一个 setTimeout,以便至少等待几秒钟,以便在服务器上完成写入操作。
能否阐明这个话题。
你可以尝试这样的东西
app.PurchaseOrder.create(formData).then(function (response) {
var purchaseOrderID = response.collection.models[0].attributes.id;
return new Promise(async function (resolve) {
for (var key in formLineData) {
if (formLineData.hasOwnProperty(key)) {
formLineData[key]["requestID"] = purchaseOrderID;
await app.PurchaseOrderLines.create(formLineData[key]);
}
}
resolve()
});
});
或者也许使用 Promise.all 做这样的事情
Promise.all(formLineData.map(()=>app.PurchaseOrderLines.create(formLineData[key])))
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当一些承诺失败时,如何继续使用$q.all()
- Nodejs和express路由,如何处理客户端的承诺
- 如何在多承诺链中处理谷歌地图API V3事件
- 创造自己的智能
- 骨干收藏,创造和承诺
- 用q创造承诺的另一种方式
- 如何创造我自己的承诺
- 如何拒绝我没有创造的承诺