Javascript 主干收集。创建和承诺

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

我目前正在实现一个采购订单类型视图。其中,我有一个PurchaseOrder表和一个PurchaseOrderLine表用于项目。当用户按下保存按钮时,我首先保存采购订单,然后检索PurchaseOrderID并保存到每个PurchaseOrder项目。问题如下:

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的情况下保存。我有两个选择:

  • 为此添加服务器验证。问题是每次都会返回一个错误,这可能会让用户感到困扰

  • 添加一个setTimeout,至少等待几秒钟,以便在服务器上完成写入操作


  • 请你解释一下这个话题

    你可以试试这样的东西

    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}
    已更正该问题。