2017-06-02 72 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