繁体   English   中英

我是否对以下代码感到满意?

[英]Am I over promising with the following code?

该代码可以工作,但我想知道我是否过于承诺

我有这个Redux Action

import Promise from 'bluebird';
const uploadAsynch = Promise.promisify(api.upload);

uploadFiles : function(data, dispatch){
    var data = {
      ep:"EP_UPLOAD",
      payload: {
       files: data.files,
       profile: data.profile
      }
    }
    uploadAsynch(data).then((result)=>{
      dispatch({type: FILES_UPLOADED})
    });
  },

api.upload是以下

import axios from 'axios';

upload : function(data, callback){
    var files = new FormData();
    for(var i=0; i<data.payload.files.length; i++){
      files.append('files', data.payload.files[i], data.payload.files[i].name);
    }
    axios.post(apiEndpoints[data.ep], files, {
      headers: {
        'accept': 'application/json',
        'Accept-Language': 'en-US,en;q=0.8',
        'Content-Type': `multipart/form-data; boundary=--*`,
      }
    })
    .then((response) => {
      callback(null, response)
    }).catch((error) => {
      callback(error)
    });
  },

所以我想知道。 如果Axios是基于Promise的请求客户端,在操作中用bluebird封装它是否正确?

我会说您的前景不佳,因为您没有充分利用诺言的全部功能。 但是,您确实会回退到回调,并且同时再次保证该函数的正确性,这毫无意义。 只需return您最初的承诺即可。

// no promisification
uploadFiles: function(data, dispatch){
  var data = {
    ep:"EP_UPLOAD",
    payload: {
      files: data.files,
      profile: data.profile
    }
  }
  return api.upload(data).then(result =>
//^^^^^^
    dispatch({type: FILES_UPLOADED})
  );
}

import axios from 'axios';

upload: function(data) { // no callback
  var files = new FormData();
  for (var i=0; i<data.payload.files.length; i++){
    files.append('files', data.payload.files[i], data.payload.files[i].name);
  }
  return axios.post(apiEndpoints[data.ep], files, {
//^^^^^^
    headers: {
      'accept': 'application/json',
      'Accept-Language': 'en-US,en;q=0.8',
      'Content-Type': `multipart/form-data; boundary=--*`,
    }
  });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM