2017-06-02 62 views
0

该代码的作品,但我想知道如果我是超过承诺我是否承诺用以下代码?

我有这个终极版动作

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的请求客户端,那么在动作中用蓝鸟包装它是否正确?

+0

你是什么意思*在*看好?你真的需要'上传'是基于回调的吗? – Ryan

+0

这就是我想知道的...应该只是一个回报,然后用一个开关处理响应? – Ando

+0

不确定你的意思是“用开关”。不过,如果你不需要你的'api.upload'是基于回调的,那么最好让它只返回一个承诺,是的。 – Ryan

回答

0

我会说你不太有希望,因为你没有使用他们的全部能力承诺。但是,你确实回退到了回调,同时再次让这个功能变得无用。只是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=--*`, 
    } 
    }); 
} 
+0

v有趣。我认为一个承诺的链条与它有关系,但从你的榜样中可以看出,似乎我可以将链条应用到一层以上(我称之为承诺)。这是正确的吗?感谢你的回答。 – Ando

+0

我不确定什么“承诺链”对您意味着什么。一个链条总是由多个*承诺组成,并且它不能被“捆绑”。如何['然后'返回新的承诺](https://stackoverflow.com/a/22562045/1048572)是真正的魔术 - 是的,承诺是*值*,可以传递并从函数返回像其他任何方法一样,调用'.then()'方法的时间/地点/时间无关紧要。 – Bergi

+0

感谢您的链接。我会更多地了解它们。 – Ando