2016-01-16 4 views
1

Я пытаюсь загрузить изображение, а также некоторые другие данные, которые взяты из формы, в мою базу данных Parse. Многое из этого кода копируется из руководства Parse Javascript. Название, цена и описание подробно загружаются, но изображение никогда не загружается. Что я получаю на моем срубе:Javascript обещает загрузку в обратном порядке

добавив товар ...

Пункта успешно добавлен!

Товар успешно загружен!

В этом порядке ... Я не уверен, почему это произойдет особенно, потому что я использую всю парадигму обещания. Почему элемент должен быть добавлен до загрузки изображения? И почему этот код не работает?

function addItem() 
{ 
    console.log('adding item...'); 
    var Item = Parse.Object.extend("FoodItem"); 
    var newItem = new Item(); 
newItem.set("createdBy", Parse.User.current()); 
newItem.set("name",$('#itemName').val()); 
newItem.set("price",parseInt($('#itemPrice').val())); 
newItem.set("description",$('#itemDescription').val()); 

//Upload pic to parse cloud 
var fileUploadControl = $("#itemImage")[0]; 
if (fileUploadControl.files.length > 0) 
{ 
    var file = fileUploadControl.files[0]; 
    var name = "photo.jpg"; 
    var parseImage = new Parse.File(name, file); 
} 

parseImage.save().then 
(
    function() 
    { 
     newItem.set(name,parseImage); 
     console.log("Image sucessfully uploaded!"); 
     return; 
    } 
).then 
(
    newItem.save().then 
    ( 
     function() 
     { 
      console.log("Item sucessfully added!") 
     }, 
     function(error) 
     { 
     // there was some error. 
      alert("Saving item failed with error code " + error.message); 
     } 
    ) 
); 

return false; 

}

ответ

0

.then() принимает функции в качестве аргументов. Во втором .then() вы хотите передать функцию, которая будет вызываться, когда обещание будет разрешено. Вместо этого вы на самом деле вызываете функцию и передаете результаты тогда .. так что функция получает вызванное до первое обещание разрешает. Кроме того, вы должны вернуть обещание с вашего первого .then(). Я думаю, что следующее должно работать:

parseImage.save().then(function() { 
    newItem.set(name,parseImage); 
    console.log("Image sucessfully uploaded!"); 
    return newItem.save(); 
}) 
.then(function() { 
     console.log("Item sucessfully added!") 
     }, 
     function(error) { 
     // there was some error. 
     alert("Saving item failed with error code " + error.message); 
     }); 
+0

Спасибо! Это работало над тем, чтобы функции выполнялись в правильном порядке. К сожалению, мне все же приходится выяснять, почему изображение по-прежнему не загружается в базу данных :(Хотя в «Журнале» сказано «изображение успешно загружено». – Josh

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