2017-06-18 41 views
1
export const checkLoggedIn =() => { 
    return new Promise((resolve, reject) => { 
    apiConfig.fetchApi('/users/is_valid', {}, 'get', {}) 
    .then((resp)=> { 
     resolve(true); 
    }) 
    .catch((exception)=> { 
     reject(false); 
    }) 
    .done() 
    }) 
} 

以上是我的用戶令牌檢查代碼。 但功能checkLoggedIn()是給像下面的圖片 enter image description here承諾不解析爲真或假

但我想只得到真或假。 請如果你發現代碼中的問題,把它註釋掉

+1

只是返回fetchApi的結果和你做的 – amd

+1

在另一個承諾中包裝一個現有的承諾被認爲是[承諾反模式](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns)因爲這完全沒有必要。 – jfriend00

+1

避免['Promise' constructor antipattern](https://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)! – Bergi

回答

2

請檢查thencatch的定義和Promise的一般定義和使用。

看起來在你的例子中apiConfig.fetchApi返回一個Promise(因爲你使用的是then()它對Promise有效)。因此,您不必創建新的Promise。

你的代碼可能看起來像這樣(我在這裏排除的響應參數,因爲你沒有在你的代碼片段使用):

export const checkLoggedIn =() => (
    apiConfig.fetchApi('/users/is_valid', {}, 'get', {}) 
    .then(() => true) 
    .catch(error => { console.log(error); return false; }) 
); 

如果apiConfig.fetchApi回報的承諾,您可以創建一個承諾。但是,您必須使用apiConfig.fetchApi的返回值,並根據其值確定或拒絕。

+0

'catch'回調將永遠不會執行。 – Bergi

+0

當然可以。 Promise拒絕是通過'then'來處理的,但是如果有任何錯誤(網絡,網址無效等),可能會拋出一個錯誤並使用catch。 – Andru

+0

錯誤*是*拒絕?它將在到達catch之前由第二個'then'參數處理,並且沒有任何'then'回調可以拋出。 – Bergi