[英]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.