我有这个功能,涉及将图像上传到Cloudinary,然后将组件的状态设置为结果URL。这是它的样子:
loadFileFront: function(e) {
var imageFrontURL = window.webkitURL.createObjectURL(e.target.files[0]);
var imageFrontFile = e.target.files[0];
var returnedURL = '';
Cloudinary._upload_file(imageFrontFile, {}, function(err, res) {
if (err){
console.log(err);
return;
}
console.log(res.url);
});
this.setState({
imageFront: returnedURL,
imageFrontFile: imageFrontFile
})
},

(忽略使用createObjectURL的顶行)。 我一直在研究如何最好地构建它,以便setState等待上传以完成要返回的res.url,从而正确地更新状态。当我调试console.log res.url时,几秒后它会显示出来。但是当我尝试将returnedURL设置为res.url时,没有等待它只是跳过函数的其余部分。 什么是等待Cloudinary上传结果的最佳方式?我一直在阅读有关Meteor 1.3中异步/等待支持的内容,但我一直在查找如何在服务器上以Meteor方法配置此Cloudinary上传方法时遇到问题。任何帮助表示赞赏!
答案 0 :(得分:0)
我认为你可以用 future 来完成这项工作。 (https://www.npmjs.com/package/future)
答案 1 :(得分:0)
如果我正确理解了问题,那么这应该解决它。你想在回调上做一个胖箭头函数,这样你就可以正确地传递(this),并且在调用this.setState时不会有任何问题。此外,由于imageFrontFile的键和值是相同的,您可以在我下面键入它时使用它。希望有所帮助。
loadFileFront: function(e) {
var imageFrontURL = window.webkitURL.createObjectURL(e.target.files[0]);
var imageFrontFile = e.target.files[0];
var returnedURL = '';
Cloudinary._upload_file(imageFrontFile, {}, (err, res) => {
if (err){
console.log(err);
return;
}
this.setState({
imageFront: res.url,
imageFrontFile
});
});
},