如何使用Promise的拒绝?

时间:2018-02-12 11:36:06

标签: ionic2 rxjs ionic3

正如documentation所说

解决

  

Promise.resolve(value)方法返回一个Promise对象   用给定的值解决。

拒绝

  

Promise.reject(reason)方法返回一个Promise对象   因具体原因而被拒绝。

我了解解决的用法,但拒绝何时使用的用途是什么?

2 个答案:

答案 0 :(得分:1)

Promise.reject是承诺抛出错误的方式。通常你的承诺中会有一个条件:

const user = {
    name: 'John',
    age: 17
}

const p = new Promise((resolve, reject) => {
    if (user.age > 18) {
        resolve('Welcome!');
    } else {
        reject(new Error('Too young!'));
    }        
});

然后,您可以链接thencatch方法来分别处理解决和拒绝的结果。

p.then(message => {
    console.log(message); // 'Welcome!', if promise resolves, won't work with age of 17
})
.catch(err => {
    console.error(err); // 'Too young!', because promise was rejected
});

答案 1 :(得分:1)

以下是此声明可用于的几个示例:

定义为返回Promise的函数,但是您执行了一些同步检查并希望返回错误:

function request(data) {
   if (!data) return Promise.reject("Empty data!");
   // other logic
}

单元测试,例如,如果服务返回错误(被拒绝的承诺),您希望测试使用默认数据:

const mockService = mock(Service);
// mock request method to return rejected promise
when(mockService.performRequest()).thenReturn(Promise.reject("Failed!"));

// inject mock instance and check that default data used if service failed
const sut = new ClassUnderTest(mockService);
expect(sut.getData()).to.eq("Default data");