-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathES6常用语法及promise&async&await的使用方法.js
158 lines (125 loc) · 3.3 KB
/
ES6常用语法及promise&async&await的使用方法.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
//1.模板字符串------------------------------------
let name = "张三";
console.log(`${name}是个共匪`); //张三是个共匪
//2.方法的简写 属性的简写--------------------------------
//以前的写法
var name = "张三";
var app = {
name: name,
run: function () {
console.log(this.name + '在跑步')
}
};
console.log(app.name); //张三
app.run(); //张三在跑步
//ES6的简写
var app = {
name,
run() {
console.log(`${this.name}在跑步`)
}
};
console.log(app.name); //张三
app.run(); //张三在跑步
//3.箭头函数 this指向上下文------------------------------------------------
//以前的写法
setTimeout(function () {
console.log('执行')
}, 1000)
//ES6写法
setTimeout(() => {
console.log('执行')
}, 1000)
/*4.回调函数 处理异步----------------------------------------------------
callback 实参
name 形参
**/
function getData(callback) {
//ajax
setTimeout(function () {
var name = "张三";
callback(name)
}, 1000)
}
//外部获取异步方法里面的数据
getData(function (data) {
console.log(data); //张三
})
/*5.Promise 处理异步 -----------------------------------------------------------
resolve 成功的回调
reject 失败的回调
var p = new Promise(functionName)
p.then((data) => { console.log(data) })
**/
var p = new Promise(function (resolve, reject) {
setTimeout(() => {
var name = "张三";
if (Math.random() < 0.8) {
resolve(name)
} else {
reject('失败')
}
}, 1000)
})
p.then((data) => {
console.log(data);//张三
})
/*6.async await 处理异步-------------------------------------------------------------------------
async 是异步的简写, 而 await 可以认为是 async wait 的简写.
所以很好理解 async 用于声明一个 function 是异步的,
而 await 用于等待一个异步方法执行完成.
**/
//普通方法
function getData() {
return '这是一个数据'
}
console.log(getData()) //这是一个数据
//async 是让方法变异步
async function getData() {
return '这是一个数据'
}
console.log(getData()); // Promise {'这是一个数据'}
//如何获取 async 异步方法里面的数据的第一种方法
async function getData() {
return '这是一个数据'
}
var p = getData();
p.then((data) => {
console.log(data)
})
/* 获取 async 异步方法里面的数据的第二种方法 await
await 是等待异步方法执行完成, 可以获取异步方法里面的数据, 但是必须得使用在异步方法里面
**/
async function getData() {
return '这是一个数据'
}
async function test() {
var d = await getData();
console.log(d)
}
test();//这是一个数据
//await 阻塞的功能, 把异步改成一个同步
async function getData() {
console.log(2);
}
async function test() {
console.log(1);
var d = await getData();
console.log(d);
console.log(3)
}
test();// 1 2 3
// async 定义的方法返回的是Promise对象
function getData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
var username = "张三"
resolve(username);
}, 1000)
})
}
async function test() {
var data = await getData();
console.log(data);
}
test(); //张三