-
Notifications
You must be signed in to change notification settings - Fork 0
/
3.promise.js
100 lines (89 loc) · 2.92 KB
/
3.promise.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
// 链式调用的问题
// let p = new Promise(function (resolve,reject) {
// setTimeout(() => {
// reject('没钱');
// }, 1000);
// });
// p.then(function (value) {
// console.log(value)
// },function (reason) {
// console.log('error',reason)
// });
let fs = require('fs');
function read(file) {
return new Promise(function (resolve, reject) {
fs.readFile(file, 'utf8', function (err, data) {
if (err) reject(err);
resolve(data);
})
});
}
// 体现promise的链式调用
// promise 每次调用then后 返回一个新的promise
// read('./name.txt').then(function (data) {
// // then方法成功后 返回的是一个新的promise,这个返回的promise会被执行,如果返回的promise是成功的,会把这个结果传递到外层的下一个then中
// return read(data)
// },function (err) {
// console.log(1,err);
// }).then(function (data) {
// console.log('age',data)
// },function (err) {
// console.log(2,err);
// })
// 如果返回的是promise 用promise的成功或者失败 执行下一个then
// 如果返回的是一个普通值 会走外层下一个then的成功
// 如果执行的时候 抛出异常就会走到下一个次then中的失败
// then中可以不传递参数,如果不传递 会透到下一个then中
// read('./name.txt').then(function (data) {
// throw new Error();
// }).then(function (data) {
// console.log('age', data)
// }).then().then(null, function (err) {
// console.log('then', err)
// }).catch(function (err) {
// console.log('error', err);
// }).then(function (data) {
// console.log(data);
// })
// Promise提供了一个 并发的方法 Promise.all 实现并发执行promise,all方法返回的结果是一个promise
// Promise.all([read('./name.txt1'), read('./age.txt')]).then(function (data) {
// console.log(data);
// }).catch(function (err) {
// console.log(err);
// });
Promise.race([read('./name.txt'), read('./age.txt')]).then(function (data) {
console.log(data);
}).catch(function (err) {
console.log(err);
});
// new Promise(function (resolve, reject) {
// resolve(1);
// })
// .then(function (x) {
// return x+1;
// })
// .then(function (x) {
// throw new Error(x);
// })
// .catch(function () {
// return 1
// })
// .then(function (x) {
// return x+1
// })
// .then(function (x) {
// console.log(x);
// })
// .catch(console.error)
// new Promise(function(resolve,reject){
// resolve(1);
// })
// .then(function (res) {
// console.log(res)
// return 2
// })
// .catch(function (err) { return 3 })
// .then(function (res) {
// console.log(res)
// })
// 老师,讲讲这道题吧假设有一个接口,通过单个的用户id可以获取用户名,现在有10个用户id(请随机生成10个0 ~100之间的数据模拟用户id),请实现一个用来获取这10个用户id对应的用户名的方法。 补充:假设接口”,参数名是uid 要求:请求并发数不超过两个(请注意并发数!!)