<script>
//我让隔壁老王买煎饼
const getJianbing=mood=>new Promise((resolve,reject)=>{
if (mood) {
const jianbing={
append:"山东煎饼",
money:10
}
resolve(jianbing);
}else{
const reason=new Error("不买");
reject(reason);
}
});
getJianbing(false).then(value=>{
console.log("老王买了"+value.append+value.money);
},
error=>{
console.log("老王告诉我"+error);
});
//图片下载,手动建img
注意:创建img标签在body中
const loadImg=url=>new Promise((resolve,reject)=>{
const img=new Image();
img.src=url;
img.οnlοad=()=>resolve(img);
img.οnerrοr=()=>reject(url);
});
const img1=document.querySelector("img");
loadImg("http://img.zcool.cn/community/0117e2571b8b246ac72538120dd8a4.jpg@1280w_1l_2o_100sh.jpg").then(value=>{img1.src=value.src});
//图片下载,自动建img
const loadImg2=url=>new Promise((resolve,reject)=>{
const img=new Image();
img.src=url;
img.οnlοad=()=>resolve(img);
img.οnerrοr=()=>reject(url);
});
loadImg("http://img.zcool.cn/community/0117e2571b8b246ac72538120dd8a4.jpg@1280w_1l_2o_100sh.jpg").then(value=>{document.body.appendChild(value)});
//多图片下载地址
const loadImge3=url=>new Promise((resolve,reject)=>{
const img =new Image();
img.src=url;
img.οnlοad=()=>resolve(img);
img.οnerrοr=()=>reject(url);
});
const promiseImage=[loadImge3("http://img07.tooopen.com/images/20170316/tooopen_sy_201956178977.jpg"),loadImge3("http://img.zcool.cn/community/01b34f58eee017a8012049efcfaf50.jpg@1280w_1l_2o_100sh.jpg"),loadImge3("http://www.qqma.com/imgpic2/cpimagenew/2018/4/5/6e1de60ce43d4bf4b9671d7661024e7a.jpg")];
Promise.all(promiseImage).then(
values=>{
values.forEach(v=>document.body.appendChild(v));
},
error=>{
}
);
//Genertor
let tell=function *(){
yield 'a';
yield 'b';
yield 'c';
return 12;
}
let k=tell();
console.log(k.next()); //输出结果a
console.log(k.next()); //输出结果b
console.log(k.next()); //输出结果c
console.log(k.next()); //输出return12值
//模拟抽奖
let draw =function(count){
console.log(`剩余多少${count}次`);
}
let resider =function *(count){
while(count>0){
count--;
yield draw(count);
}
}
let start =resider(5);
let btn =document.createElement("BUTTON");
btn.id="start";
btn.textContent="抽奖";
document.body.appendChild(btn);
document.getElementById("start").addEventListener("click",function(){
start.next();
},false);
//其他案例
function *show(){
console.log("red");
let n=yield;
console.log(n);
console.log("green");
}
const s=show();
s.next(1);
//面试题
function *fn1(){
for(let i=0;true;i++){
const result=yield i;
if(result){
i=-1;
}
}
}
const f = fn1();
console.log(f.next());
console.log(f.next());
console.log(f.next(true));
console.log(f.next());
</script>
<script>
//ajax
const ajax=(url,succ,fall)=>{
const xhr=new XMLHttpRequest();
xhr.open("GET",url);
xhr.onreadystatechange=function(){
console.log("aaa");
if (this.readyState==4) {
if (this.status===200) {
succ(this.response);
}else{
fall(this.responseText);
}
}
}
xhr.send();
};
const divs =document.querySelectorAll("div");
//普通函数的调用ajax
ajax("js/a.txt",function(data){
divs[0].innerHTML=data
});*/
/*//promise
new Promise(resolve=>ajax("js/a.txt",resolve)).then(
value=>{
divs[0].innerHTML=value
return new Promise(resolve=>ajax("js/b.txt",resolve));
}
).then(
value=>{
divs[1].innerHTML=value
}
);
//Genrator
function *ajaxs(){
divs[0].innerHTML=yield request("js/a.txt");
divs[1].innerHTML=yield request("js/b.txt");
divs[2].innerHTML=yield request("js/c.txt");
};
const aj=ajaxs();
aj.next();
function request(url){
ajax(url,data=>aj.next(data));
};
//Async是Genrator的语法糖
//语法糖:箭头函数是普通函数的语法糖
//优点1.内置执行器 2.更好的语义 3.更好的适用性 4.Genrator不能用箭头函数 5.返回值Promise
//缺点1.ES7
async function fn1(){
return "jw";
}
const p=fn1();
console.log(p);
p.then(
value=>console.log(value)
);
//装饰,修饰器:是一个函数,用来改变类的行为
//第一个修饰器作用:不能修改属性
let readonly =function(target,name,descriptor){
descriptor.writable=false;
return descriptor;
};
//装饰器属性不能超过100
let max_100=function(target,name,descriptor){
if (target.name>100) {
Throw = new Error("设置错误");
}
}
//装饰器多一个Name属性叫HELLO
let duo_name=function(target,name,descriptor){
target.myName="HELLO";
}
@duo_name
class Person{
//不能修改,属性不能超过100
@readonly
@max_100
time(){
return '2019-01-01';
}
};
console.log(Person.myName);//构造的就多一个属性
</script>