2017-06-18 57 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