【问题标题】:Best practices for waiting on the result of a function in Meteor?在 Meteor 中等待函数结果的最佳实践?
【发布时间】:2016-07-25 13:02:43
【问题描述】:

我有这个功能,它涉及将图像上传到 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 中的 async / await 支持,但我一直无法弄清楚如何在服务器上的 Meteor 方法中配置此 Cloudinary 上传方法。任何帮助表示赞赏!

【问题讨论】:

    标签: javascript meteor reactjs async-await


    【解决方案1】:

    如果我正确理解了问题,那么这应该可以解决它。你想在回调上做一个粗箭头函数,这样你就可以正确地传递(this),并且调用 this.setState 不会有任何问题。另外由于 imageFrontFile 的 key 和 value 是相同的,你可以按照我在下面输入的方式使用它。希望对您有所帮助。

    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
            });
        });
    },
    

    【讨论】:

    • 谢谢,这最终成为了解决方案!只需要将正确的 this 传递给 setState。
    【解决方案2】:

    我认为你可以用 future 完成这项工作。 (https://www.npmjs.com/package/future)

    这是一个例子:https://www.discovermeteor.com/patterns/5828399

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-02
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 2017-07-05
      相关资源
      最近更新 更多