promise 如何解决多个异步回调问题
首先题目如下:
我先要取得用户名getUserName()
,才能去获取用户信息getUser()
也就是说getUserName()
需要在getUser()
之前
promise.all
function getUserPromise(promiseX, promiseY) {
return Promise.all([promiseX, promiseY])
.then(values =>
// 返回的values由 promiseX 与 promiseY返回的值所构成的数组。
values
)
}
function getUserName() {
let data = 'superman';
return new Promise((resolve, reject) => {
setTimeout(resolve(data), 1000);
})
}
function getUser() {
let data = {
id: 1,
username: 'superman',
gender: 'male'
}
return new Promise((resolve, reject) => {
setTimeout(resolve(data), 2000);
})
}
getUserPromise(getUserName(), getUser())
.then(data => {
// 这里的data就是包含了getUserName 和 getUser返回值所组成的数组
console.log(data); // [ 'superman', { id: 1, username: 'superman', gender: 'male' } ]
})
这个方法其实就是设置延时,然后 promise.all 调用
promise 链式调用
function getUserName() {
let data = 'superman';
return new Promise((resolve, reject) => {
setTimeout(resolve(data), 4000);
})
}
function getUser(username) {
let data = {
id: 1,
username: 'superman',
gender: 'male'
}
return new Promise((resolve, reject) => {
if (username) {
setTimeout(resolve(data), 2000);
} else {
reject('err');
}
})
}
getUserName().then(username => {
return getUser();
})
.then(user => {
console.log(user);
})
.catch(err => {
console.log(err);
})