欢迎光临

木子屋

标题: ES6学习笔记：Promise对象

作者: dnawo

日期: 2022-04-10 03:16 PM

分类: 脚本语言

内容: Promise是异步编程的一种解决方案，从它可以获取异步操作的消息，Promise提供统一的API，各种异步操作都可以用同样的方法进行处理。Promise对象状态有三种：进行中、已成功和已失败，状态一旦变化，就不能再改变。Promise对象创建语法：
复制内容到剪贴板 程序代码//创建
const promise = new Promise(function(resolve, reject){});
//回调
promise.then(resolved, rejected);
resolve和reject是Javascript引擎定义好的函数，resolve用于将Promise对象的状态改为已成功，reject用于将Promise对象的状态改为已失败，需手工调用，它们都可以传出一个参数给回调函数。
resolved和rejected是回调函数，resolved在状态成功时被调用，rejected在状态失败时被调用，两个函数是可选的，不一定要提供，两个函数需自行编写，由系统调用。举个例子：
复制内容到剪贴板 程序代码const todo = function(year){
return new Promise(function(resolve, reject){
if(year>1982){
resolve("ok");
}else{
reject("error");
}
});
};
todo(1984).then(
function(msg){console.log('resolved:'+msg)},
function(msg){console.log('rejected:'+msg)}
);
//resolved:ok
then方法返回的是一个新的Promise实例(不是原来那个Promise实例)，因此可以采用链式写法(上一个回调函数返回的结果继续传给下一个回调函数)：
复制内容到剪贴板 程序代码(new Promise((resolve, reject)=>{resolve(1)}))
.then((msg)=>{console.log(msg);return ++msg;})
.then((msg)=>{console.log(msg);return ++msg;})
.then((msg)=>{console.log(msg);return ++msg;})
Promise错误捕捉
上文说过，then方法的第二个参数可以用于捕捉错误：
复制内容到剪贴板 程序代码(new Promise((resolve, reject)=>{throw 'error'})).then(
(msg)=>{console.log('resolved:'+msg)},
(msg)=>{console.log('rejected:'+msg)}
);
//rejected:error
但是，万一then方法里又发生了错误怎么处理呢？还有then链式写法时，每个then方法里重复一样的错误捕捉冗余又不美观，因此建议在最后用catch方法进行错误捕捉：
复制内容到剪贴板 程序代码(new Promise((resolve, reject)=>{throw 'error'}))
.then()
.then()
.then()
.then()
.then()
.catch((msg)=>{console.log('rejected:'+msg)});
//rejected:error
复制内容到剪贴板 程序代码(new Promise((resolve, reject)=>{resolve(1)}))
.then()
.then()
.then(()=>{throw 'error'})
.then()
.then()
.catch((msg)=>{console.log('rejected:'+msg)});
//rejected:error

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.793 ms

返回

标题: ES6学习笔记：Promise对象

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.793 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.824 ms

返回