【问题标题】:How to perform a two callback functionality?如何执行两个回调功能?
【发布时间】:2018-02-10 14:47:37
【问题描述】:

我正在使用带有 REACT/AXIOS 的 cloudinary api,我想知道如何在 axios 调用之前和之后提取数据。我遇到的问题是,如果我使用一个回调,我只能放置一个或另一个数据。那么是否可以使用两个回调,如果可以,你会怎么做?

或者我应该以不同的方式解决这个问题?

我想要的是拉出上传进度并能够将该值存储到状态中。我唯一的问题是我不确定这样做的正确方法?我需要在onUploadProgress 函数内完成。

代码如下:

组件中的功能:

uploadImage(files) {
    const image = files[0];

    const cloudName = 'hyszj0vmt';
    const url = `https://api.cloudinary.com/v1_1/${cloudName}/image/upload`;

    const apiSecret = '***********';
    const uploadPreset = '**************';
    const timestamp = Date.now() / 1000;
    const paramStr = `timestamp=${timestamp}&upload_preset=${uploadPreset}${apiSecret}`;
    const signature = sha1(paramStr);
    const params = {
      api_key: '*******',
      timestamp: timestamp,
      upload_preset: uploadPreset,
      signature: signature
    };

    APIManager.upload(url, image, params, (err, response) => {
      if (err) {
        console.log(`UPLOAD ERROR: ${err}`);
        return;
      }

      const imageUrl = response['secure_url'];
      let updatedProfile = Object.assign({}, this.state.updated);
      updatedProfile['image'] = imageUrl;

      this.setState({
        updated: updatedProfile
      });
    });
  }

APIManager 函数:

upload: (endpoint, file, params, callback) => {
    let fd = new FormData();

    fd.append('file', file);
    Object.keys(params).forEach(key => {
      fd.append(key, params[key]);
    });

    const config = {
      headers: { 'X-Requested-With': 'XMLHttpRequest' },
      onUploadProgress: progressEvent => {
        const progress = Math.round(
          progressEvent.loaded * 100.0 / progressEvent.total
        );

        console.log(progress + '%');
      }
    };

    axios
      .post(endpoint, fd, config)
      .then(response => {
        const { data } = response;
        callback(null, data);
      })
      .catch(err => {
        callback(err, null);
      });
  }
};

【问题讨论】:

    标签: reactjs axios cloudinary


    【解决方案1】:

    这个怎么样?

    upload: (endpoint, file, params, callback, callbackProgress) => {
        ...
    
        const config = {
          headers: { 'X-Requested-With': 'XMLHttpRequest' },
          onUploadProgress: progressEvent => {
            const progress = Math.round(
              progressEvent.loaded * 100.0 / progressEvent.total
            );
            callbackProgress(progress);
          }
        };
    
        ...
    });
    

    用法:

    APIManager.upload(url, image, params, (err, response) => {
      ...
    }, (progress) => {
        console.log(progress);
    });
    

    【讨论】:

    • 如何在 APIManager 函数中调用它?
    • 什么意思?这实际上是在 APIManager 函数中
    • 谢谢先生,我会试一试,但它看起来应该对我有用
    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多