js 中promise

207 阅读1分钟
// 创建一个promise对象
		new Promise((resolve, reject) => {
			/* 业务逻辑 */
			/* if (true) {
				// success
				resolve(success);
			} else {
				reject(error);
			} */
		}).then(
			success => {
				console.log('成功')
			},
			error => {
				console.log('失败')

			}
		);

Promise 实例方法

在Promise实例化一个promise对象后,它只有三个方法,即 then, catch, finally。

1.then

then 方法里执行的是resolve状态

request(url).then((res) => {
    // res 为resolve状态返回的数据,一般也指成功状态
})

then 方法可以链式调用,即文章开头的request方法链式then调用

request(url).then((res) => {
    ... 
    return res.data;
}).then((data) => {
    // 此处的data 即为上一步then的return值:res.data
});

所以then的return值也可以是一个promise对象:

request(url, (res) => {
    ... 
    // 返回request方法调用结果:即一个promise对象
    return request(res.url);
}).then((res) => {
    // 此处的res 即为上一步返回方法request里的的resolve值,相当于上一步返回request调用then
    ... 
    // 继续返回一个promise对象
    return request(res.url);
}).then((res) => {
    
})

2.catch

catch 方法里执行的是reject状态和错误处理

request(url).then((res) => {

}).catch((e) => {
    // reject状态或者request方法内部错误了,都会在这里被捕获到。
});

说白了,catch方法不仅处理reject状态数据,而且还会捕获因为代码运行而产生的错误,我们就叫它错误垃圾处理箱吧。

3.finally

finally 方法即不管resolve还是reject状态都会执行的方法。

request(url).then((res) => {

}).catch((e) => {

}).finally(() => {
    console.log('请求完成了');
});