扑完后执行for循环

时间:2019-04-24 05:45:49

标签: android dart flutter

返回三个JSON数组的服务器响应和所有对象分别与optionsGroupListattributesassignedattributes一起存储在数据库中。 在项目中,我有三个表分别命名为groupattributeassignedattribute。首先,我必须在组表中插入optionsGroupList的所有元素,然后才能这样做。在第二个数组中,我得到groupidattributeidattributename,但在第二张表我有4列 groupidattributeidattributenamegroupname,但是对于组名,我必须从组表中按组ID获取特定组的记录,但是我的第二个循环首先执行所以我无法获取组记录,因为循环仍在第二次循环开始之前完成,而第二次循环在完成第一个循环之前仍在插入记录,我的第二个表依赖于第一个,而第三个表则依赖于第二个,因此我需要插入记录完成后。有时它可以正常运行

{
    "result": 1,
    "data": "optionsList",
    "merchantid": "MER-07156",
    "optionsGroupList": [{
        "grouprowid": "3012",
        "groupname": "Color",
        "isrequired": "0"
    }],
    "attributes": [{
        "attributerowid": "20794",
        "grouprowid": "3012",
        "attributename": "Red",
        "weight": "0"
    }],
    "assignedattributes": [{
            "attributegrouprowid": "154577",
            "productrowid": "342702",
            "attributerowid": "20794",
            "subsku": "",
            "quantity": "0",
            "pricechange": "4"
        },
        {
            "attributegrouprowid": "154590",
            "productrowid": "354723467",
            "attributerowid": "20794",
            "subsku": "0",
            "quantity": "0",
            "pricechange": "0"
        }
    ]
}

我的第二个循环调试语句先打印。

optionListService().then((onValue) async {
  if (onValue.result == 1) {

    //Loop 1
    for(int i=0;i<onValue.optionsGroupList.length;i++){
      _insertOption(onValue.optionsGroupList[i]);
    }

    //Loop 2
    for(int j=0;j<onValue.attributes.length;j++){
      debugPrint('Attribute Name:--${ onValue.attributes[j].attributename}');// this is printed first before first loop excuted
      List groupIdList=new List<Map<String,dynamic>>();
      groupIdList= await dbHelper.queryReadOption(onValue.attributes[j].grouprowid); // here i'm finding group name from group table but i think is executing first.

      if(groupIdList.length>0){

        _insertOptionAttribute(onValue.attributes[j],groupIdList[0][DatabaseHelper.columnGroupName],groupIdList[0][DatabaseHelper.columnIsRequired]);
      }

    }

    //Loop 3
  for(int i=0;i<onValue.assignedattributes.length;i++){

      String attr=onValue.assignedattributes[i].attributerowid;
      arrtIdList=new List<Map<String,dynamic>>();
      arrtIdList= await dbHelper.queryReadAttribute(attr);
      if(arrtIdList.length>0){

        _insertProductWithAttribute(
            onValue.assignedattributes[i],
            arrtIdList[0][DatabaseHelper.columnGroupId],
            arrtIdList[0][DatabaseHelper.columnGroupName],
            arrtIdList[0][DatabaseHelper.columnAttributeName],
            arrtIdList[0][DatabaseHelper.columnIsRequired],
            arrtIdList[0][DatabaseHelper.columnWeight]
        );
      }

    }}});}

1 个答案:

答案 0 :(得分:0)

只需在链接的“ then”块中添加第二个循环,并在第一个块中返回“ onValue”变量。像这样:

optionListService().then((onValue) async {
    if (onValue.result == 1) {

        //Loop 1
        for(int i=0;i<onValue.optionsGroupList.length;i++){
            _insertOption(onValue.optionsGroupList[i]);
        }
    }

    return onValue;

}).then((onValue) {
    if (onValue.result == 1) {
        //Loop 2
        for(int j=0;j<onValue.attributes.length;j++){
            // some code
        }
    }
});