标签:function 13 resolve err value Promise reject
Promise介绍
Promise是ES6引入的异步编程的新解决方案。语法上Promise是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果。
- Promise构造函数:Promise(excutor){}
- Promise.prototype.then方法
- Promise.prototype.catch方法
//实例化 Promise 对象
const p = new Promise(function(resolve,reject){
setTimeout(function(){
//
let date = '数据库中的用户数据';
//resolve
resolve(data);
let err = '数据读取失败';
reject(err);
},1000);
})
//调用promise对象的then方法
p.then(function(value){
console.log(value);//数据库中的用户数据
},function(reason){
console.log(reason);//数据读取失败
})
Promise封装读取文件
//1.引入fs模块
const fs = require('fs');
//2.调用方法读取文件
//fs.readFile('./resources/为学.md',(err,data)=>{
// //判断失败 则抛出错误
// if(err) throw err;
// //如果没有出错,则输出内容
// console.log(data.toString());
//})
//3.使用Promise封装
const p = new Promise(function(resolve,reject){
fs.readFile('./resources/为学.md',(err,data)=>{
//判断如果失败
if(err) reject(err);
//如果成功
resolve(data)
})
})
//调用promise对象的then方法
p.then(function(value){
console.log(value。toString());
},function(reason){
console.log('读取失败');
})
Promise封装AJAX
//接口地址 https:api.apiopen.top/getJoke
const p = new Promise((resolve,reject)=>{
//1.创建对象
const xhr = new XMLHttpRequest();
//2.初始化
xhr.open('GET',"https:api.apiopen.top/getJoke");
//3.发送
xhr.send();
//4.绑定事件,处理响应结果
xhr.onreadystatechange = function(){
//判断
if(xhr.readyState === 4){
//判断响应状态码 200-299
if(xhr.status >= 200 && xhr.status < 300){
//表示成功
resolve(xhr.response);
}else{
//如果失败
reject(xhr.status);
}
}
}
})
//指定回调
p.then(function(value){
console.log(value);
}function(reason){
console.log(reason);
})
Promise.prototype.then方法
//创建Promise对象
const p = new Promise(function(resolve,reject){
setTimeout(function(){
resolve('用户数据');
//reject('出错了');
},1000);
})
//调用then方法 then方法的返回结果是Proimse对象,对象状态由回调函数的执行结果方法决定
//1.如果回调函数中返回的结果是 非pormise 类型的属性,状态为成功,返回值为对象的成功的值
const result = p.then(value=>{
console.log(value);
//1.非 promise 类型的属性
return 'iloveyou';
//2.是 promise对象
return new Promise((resolve,reject)=>{
//resolve('ok');
reject('error');
})
//3.抛出错误
//throw new Error('出错了!');
throw '出错了';
},reason=>{
console.warn(reason);
})
//链式调用
p.then(value => {
},reason => {
}).then(value => {
},reason => {
})
Promise实践 读取多个文件
//引入fs模块
const fs = require('fs');
//调用方法读取文件
//fs.readFile('./resources/为学.md',(err,data1)=>{
//fs.readFile('./resources/插秧诗.md',(err,data2)=>{
//fs.readFile('./resources/观书有感.md',(err,data3)=>{
//let result = data1 + '\r\n' + data2 + '\r\n' + data3;
//console.log(result);
//})
//})
//})
//使用Promise实现
const p = new Promise(function(resolve,reject){
fs.readFile('./resources/为学.md',(err,data)=>{
resolve(data)
})
})
p.then(value=>{
return new Promise(function(resolve,reject){
fs.readFile('./resources/插秧诗.md',(err,data)=>{
resolve([value,data])
})
})
}).then(value=>{
return new Promise(function(resolve,reject){
fs.readFile('./resources/观书有感.md',(err,data)=>{
//压入
value.push(data);
resolve(value);
})
})
}).then(value=>{
console.log(value.join('\r\n'));
})
Promise.prototype.catch方法
const p = new Promise((resolve,reject)=>{
setTimeout(()=>{
//设置p对象的状态为失败,并设置失败的值
reject('出错了')
},1000)
})
p.then(value=>{},reason=>{
console.log(reason);
})
//catch语法糖
p.catch(reason){
console.log(reason);
})
标签:function,13,resolve,err,value,Promise,reject 来源: https://www.cnblogs.com/AaronNotes/p/14367299.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。