gpt4 book ai didi

javascript - 解析: using httpRequest to load image

转载 作者:行者123 更新时间:2023-12-02 15:17:12 26 4
gpt4 key购买 nike

我正在尝试在一个 beforeSave 触发器内使用 Parse.Cloud.httpRequest promise 加载图像,但显然这个 promise 没有被调用。调用错误回调,但错误消息始终为空。

是否可以将其放入保存前触发器中?或者可能是因为我在 foreach 内部执行此操作而发生的?

解析日志中没有出现消息“pablo# after load imageUrl”,并且出现消息“保存用户图片时出错>>>”,但错误文本为空

Parse.Cloud.beforeSave(Parse.User, function(request, response) {
Parse.Cloud.useMasterKey();
response.success();
var found = false;
console.log(request.object.dirtyKeys());
for (dirtyKey in request.object.dirtyKeys()) {

if (request.object.dirtyKeys()[dirtyKey] === "imageurl") {
found = true;

Parse.Cloud.httpRequest({
url: request.object.get("imageurl")
}).then(function(response) {
console.log("pablo# after load imageUrl");
var image = new Image();
return image.setData(response.buffer);
}).then(function(image) {
return image.data();
}).then(function(buffer) {
var base64 = buffer.toString("base64");
var fileTitle = request.object.id + ".png";
console.log(fileTitle);
var file = new Parse.File(String(fileTitle), { base64: base64 });
return file.save();
}).then(function(file) {
request.object.set("profileImage", file);
console.log('success');

response.success();
}, function(error) {
console.error(error);
response.error("error when save user picture>>> " + error.text);
});
}
}

if(!found){
response.success();
}
});

最佳答案

只需对代码进行一些改进,这一切都是可行的:(1)不要立即调用 success() ,否则什么也不会发生,(2)不需要循环脏键,因为我们只是检查其中之一是否存在,(3) 您的代码假设 image.setData() 返回图像数据履行的 promise :文档对此不清楚,但暗示不然,(4) 最后,让我们将图像内容分解为一个单一的 promise 返回函数,因此更容易看到发生了什么......

Parse.Cloud.beforeSave(Parse.User, function(request, response) {
fetchAndSaveUserImage(request.object).then(function() {
response.success();
}, function(error) {
response.error(error);
});
}

function fetchAndSaveUserImage(user) {
if (user.dirtyKeys().indexOf("imageurl") == -1) { return false; }

var image = new Image(); // more like docs, so we have the image in any block below
var params = { url: request.object.get("imageurl") };
return Parse.Cloud.httpRequest(params).then(function(response) {
console.log("pablo# after load imageUrl");
return image.setData(response.buffer);
}).then(function() {
return image.data(); // this is likely the same as response.buffer, but the docs do it, so just to be certain...
}).then(function(buffer) {
var base64 = buffer.toString("base64");
var fileTitle = user.id + ".png";
console.log(fileTitle);
var file = new Parse.File(String(fileTitle), { base64: base64 });
return file.save();
}).then(function(file) {
request.object.set("profileImage", file);
return true;
});
}

顺便说一句,我省略了 useMasterKey,因为我发现代码中没有任何内容需要比用户的 beforeSave 中已经假定的权限更多的权限。

关于javascript - 解析: using httpRequest to load image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34358353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com