我正在尝试将图片以及从表单捕获的其他一些数据上传到我的Parse数据库。很多此代码都是从Parse 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 :(得分:0)
.then()
将函数作为参数。在您的第二个.then()
中,您希望在解析promise时传递要调用的函数。相反,你实际上正在调用函数并将结果传递给那么..所以函数在第一个promise解析之前被调用。此外,您应该从第一个.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);
});