2016-12-14 2 views
1

Итак, у нас есть большие данные в формате JSON. Мы хотим сохранить его в class (table) в нашем приложении Parse. Я написал сценарий JS, который может читать файл и просматривать данные JSON. Но когда происходит экономия, все это перепутано. Его петли в первом навсегда. Я понимаю, что есть что-то вроде promise bt Я не понимаю, как его использовать? Может кто-нибудь помочь. Мой код приведен ниже.Parse-сервер сохраняет данные последовательно

function processJson(result) { 
object = JSON.parse(result); 
verbose.textContent = "Read " + object.results.length + " objects"; 
var count = object.results.length; 
var countAc = 0; 
logger("To save: " + count); 
i = 0; 
while (i < count) { 
    if (object.results[i].areaType == 'ac') { 
     save(i).then(function (object) { 
      i = i + 1; 
      logger("Success: " + object.id); 
     }); 
    } else { 
     logger("ac not found"); 
     i = i + 1; 
    } 
} 
} 

function save(i) { 
    logger("ac found"); 
    var constituency = new Constituency(); 
    constituency.set("points", object.results[i].points); 
    constituency.set("areaType", object.results[i].areaType); 
    constituency.set("name", object.results[i].name); 
    constituency.set("state", object.results[i].state); 
    constituency.set("index", object.results[i].index); 
    constituency.set("pc", object.results[i].pc); 
    constituency.set("center", object.results[i].center); 
    constituency.set("oldObjectId", object.results[i].objectId); 

return constituency.save(); 

/*constituency.save().then(function(obj) { 
    // the object was saved successfully. 
    i = i + 1; 
    logger("Success: " + obj.id); 
}, function(error) { 
    // the save failed. 
    logger(error.message); 
    i = i + 1; 
});*/ 
} 
+0

Я думаю, вы не хотите, чтобы 'сохранить (я)' вы хотите 'сохранить (object.results [я]);' – nerdlyist

ответ

0

Я хотел бы сделать что-то вроде этого:

function processJson(result) { 
 
    
 
    var object = JSON.parse(result); 
 
    
 
    for (var i = 0; i < object.results.legnth; i++){ 
 
    var parseObject = createParseObjectFromJSONObject(object.results[i]); 
 
    parseObject.save(null).then(function(object){ 
 
     console.log("object saved: " + object.id); 
 
    },function(error){ 
 
     console.log("error: " + error); 
 
    }); 
 
    } 
 
    
 
} 
 

 
function createParseObjectFromJSONObject(jsonObject){ 
 
    var constituency = new Constituency(); 
 
    constituency.set("points", jsonObject.points); 
 
    constituency.set("areaType", jsonObject.areaType); 
 
    constituency.set("name", jsonObject.name); 
 
    constituency.set("state", jsonObject.state); 
 
    constituency.set("index", jsonObject.index); 
 
    constituency.set("pc", jsonObject.pc); 
 
    constituency.set("center", jsonObject.center); 
 
    constituency.set("oldObjectId", jsonObject.objectId); 
 
    return constituency; 
 
}

Вы можете сделать это даже лучше ..

Вы можете сначала нажать все синтаксического анализа объектов в массив, а затем позвоните saveAll, чтобы сохранить все t он анализирует объекты по одному запросу. Это решение подходит для < 1000 записей .. Если у вас более 1000, вы можете делать подкачки (первые 1000 и saveAll, другие 1000 и saveAll ....)

В этой версии ваш код будет выглядеть так:

function processJson(result) { 
 
     
 
     var object = JSON.parse(result); 
 
     var allObjects = []; 
 
     
 
     for (var i = 0; i < object.results.legnth; i++){ 
 
     var parseObject = createParseObjectFromJSONObject(object.results[i]); 
 
     allObjects.push(parseObject); 
 
     } 
 
     
 
     // outside the loop we are ready to save all the objects in 
 
     // allObjects array in one service call! 
 
     if (allObjects.length > 0){ 
 
     
 
      Parse.Object.saveAll(allObjects).then(function(){ 
 
      console.log("all objects were saved!"); 
 
      // all object ids are now available under the allObjects array.. 
 
      },function(error){ 
 
       console.log("error: " + error); 
 
      }); 
 
     } 
 
    
 
    } 
 

 
    function createParseObjectFromJSONObject(jsonObject){ 
 
     var constituency = new Constituency(); 
 
     constituency.set("points", jsonObject.points); 
 
     constituency.set("areaType", jsonObject.areaType); 
 
     constituency.set("name", jsonObject.name); 
 
     constituency.set("state", jsonObject.state); 
 
     constituency.set("index", jsonObject.index); 
 
     constituency.set("pc", jsonObject.pc); 
 
     constituency.set("center", jsonObject.center); 
 
     constituency.set("oldObjectId", jsonObject.objectId); 
 
     return constituency; 
 
    }

Good Luck :)

Смежные вопросы