js es6语法 Iterator遍历器 promise async函数
2020-12-26 11:32
标签:方案 情况 属性 gen 语法 turn getjson == als 他是一种接口,为不同的数据结构体用统一的访问机制 接口部署在数据结构的Symbol.Iterator属性,或者说一个数据结构只要具备Symbol.Iterator属性就认为是可以遍历的 异步编程的解决方案 已完成 fulfilled 进行中 pending 失败 rejected Promise就是一个构造函数,可以生成实列 用于指定发生错误时的回调函数 将多个Promise实列包装成一个新的Promise实列 将多个Promise实列包装成一个新的Promise实列 他是Generator函数语法糖,让异步更简单 这个函数返回的是Promise对象,就可以使用then添加回调。 正常的情况下await后面是一个Promise对象,返回该对象的结果,如果不是Promise对象,返回的是这个值 也就是 async 出错,Promise处于reject状态 js es6语法 Iterator遍历器 promise async函数 标签:方案 情况 属性 gen 语法 turn getjson == als 原文地址:https://www.cnblogs.com/bnzw/p/13905133.html一, Iterator遍历器
var a = makeIterator([‘a‘, ‘b‘]);
console.log(a.next()); // a false
console.log(a.next()); // b false
console.log(a.next()); // undefined true
function makeIterator(array) {
var nextIndex = 0;
return {
next: function () {
return nextIndex
1, 默认接口
var obj = {
[Symbol.Iterator]: function () {
return {
next: function () {
return {
value: 1,
done: true,
}
}
}
}
}
var a = obj[Symbol.Iterator]().next()
console.log(a);
// 数组有默认的[Symbol.Iterator]
let arr = [‘a‘,‘b‘,‘c‘];
let ter = arr[Symbol.iterator]();
console.log(ter.next());
console.log(ter.next());
console.log(ter.next());
console.log(ter.next());
二, Promise
1, 基本语法
var per = new Promise(function(resolve,reject){
if(true){
resolve // 数据
}else{
reject // 错误信息
}
});
// 实列生成以后 可以用then方法处理resolve状态和reject状态
per.then(function(value){
// success
},function(error){
// error
})
2, Promise会立即执行
let per = new Promise(function(resolve, reject){
console.log(‘立即执行‘); // 1
resolve();
})
per.then(function(){
console.log(‘resolved‘); // 3
})
console.log(‘hello‘); // 2
3, 请求数据
// 1、实列化一个对象
function getJson(url) {
var per = new Promise(function (resolve, reject) {
// 请求数据的ajax
var ajax = new XMLHttpRequest();
ajax.open(‘get‘, url);
ajax.send();
// 监听
ajax.onreadystatechange = function () {
if (ajax.readyState === 4) {
if (ajax.status === 200) {
resolve(ajax.responseText);
} else {
reject(new Error(ajax.status));
}
}
}
})
return per;
}
var a = getJson(‘./data/banner.json‘)
console.log(a);
getJson(‘./data/banner.json‘).then(function(json){
console.log(json);
},function(text){
console.log(text);
})
4, then
getJson(‘./data/banner.json‘).then(function(json){
console.log(json);
},function(text){
console.log(text);
})
5, 链式写法
getJson(‘./data/banner.json‘)
.then(function (json) {
return getJson(‘./data/1.txt‘);
})
.then(function(){
console.log(‘我的‘);
},function(){
console.log(‘你的‘);
})
6, catch
getJson(‘./data/banner.json‘).then(function (post) {
console.log(post);
}).catch(function (error) {
console.log(‘错误:‘, error);
})
7, all
const p = Promise.all([p1,p2,p3]);
//这个方法接受一个数组作为参数,p1,p2,p3都是Promise实列
const per = [1, 2, 3].map(function (item) {
return getJson(‘./data/‘ + item + ‘.txt‘); // ‘./data/1.json‘
})
Promise.all(per).then(function (post) {
console.log(post);
}).catch(function (reason) {
console.log(reason);
})
8, race
const p = Promise.race([p1,p2,p3]);
const p = Promise.race([
getJson(‘./data/banner1.json‘),
new Promise(function (resolve, reject) {
setTimeout(() => reject(new Error(‘错误‘)), 2000)
})
])
p.then(console.log(‘1‘))
.catch(console.error);
三, async函数
function*a(){
yield 1;
}
var n = a();
n.next();
1, 改成async函数,就是用async把星号替换掉,用await把yield替换掉
async function a(){
var h = await 1;
console.log(h);
}
a();
2, await
async function f(){
return await 123;
}
f().then(v=>console.log(v))
3, 错误处理
async function f() {
await new Promise(function (resolve, reject) {
throw new Error(‘出错了‘);
})
}
f().then(v => console.log(v))
.catch(e => console.log(e));
文章标题:js es6语法 Iterator遍历器 promise async函数
文章链接:http://soscw.com/index.php/essay/38343.html