不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
ES6学习笔记:Promise对象
编辑:dnawo 日期:2022-04-10
Promise是异步编程的一种解决方案,从它可以获取异步操作的消息,Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。Promise对象状态有三种:进行中、已成功和已失败,状态一旦变化,就不能再改变。Promise对象创建语法:
resolve和reject是Javascript引擎定义好的函数,resolve用于将Promise对象的状态改为已成功,reject用于将Promise对象的状态改为已失败,需手工调用,它们都可以传出一个参数给回调函数。
resolved和rejected是回调函数,resolved在状态成功时被调用,rejected在状态失败时被调用,两个函数是可选的,不一定要提供,两个函数需自行编写,由系统调用。举个例子:
then方法返回的是一个新的Promise实例(不是原来那个Promise实例),因此可以采用链式写法(上一个回调函数返回的结果继续传给下一个回调函数):
Promise错误捕捉
上文说过,then方法的第二个参数可以用于捕捉错误:
但是,万一then方法里又发生了错误怎么处理呢?还有then链式写法时,每个then方法里重复一样的错误捕捉冗余又不美观,因此建议在最后用catch方法进行错误捕捉:
复制内容到剪贴板
程序代码

//创建
const promise = new Promise(function(resolve, reject){});
//回调
promise.then(resolved, rejected);
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
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;})
.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
(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
.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
.then()
.then()
.then(()=>{throw 'error'})
.then()
.then()
.catch((msg)=>{console.log('rejected:'+msg)});
//rejected:error
评论: 0 | 引用: 0 | 查看次数: 1375
发表评论
请登录后再发表评论!