Promise(resolve, reject)结合使用
要点:只需要调取一个then,then里面传递两个函数,前者执行调用resolve后处理的代码,后者调用reject后处理的代码
new Promise((resolve, reject) => {
setTimeout(() => {
// 先调谁成功会直接return出去,执行对应结果
// 成功
// resolve();
// 失败
reject();
}, 2000)
}).then(() => {
// 成功时处理代码
console.log("success");
}, () => {
// 失败时处理代码
console.log("err");
})
Promise链式调用写法
1.正常写法
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('aaa');
}, 2000);
}).then(res => {
// 首次先自己处理接收结果
console.log(res, "第一层处理代码");
// 二次再增加拼接部分
return new Promise((resolve, reject) => {
resolve(res + '111');
}).then(res => {
console.log(res, "第二层处理结果");
// 三次处理
return new Promise((resolve, reject) => {
resolve(res + '222');
}).then(res => {
console.log(res, "第三层处理结果");
})
})
})
2.省略new,直接调用Promise.resolve/reject
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('bbb');
}, 2000)
}).then(res => {
console.log(res, "第一次代码处理");
// 一次return出来处理结果
return Promise.resolve(res + '111');
}).then(res => {
console.log(res, "第二次代码处理");
// 二次return出来处理结果
return Promise.resolve(res + '222');
}).then(res => {
console.log(res, "第三次代码处理");
return Promise.reject("请求失败");
}).catch(err => {
console.log(err);
})
3.最简写法,直接return处理结果
new Promise(resolve => {
setTimeout(() => {
resolve('ccc');
}, 2000);
}).then(res => {
console.log(res, "第一次");
// 简写
return res + '111';
}).then(res => {
console.log(res, "第二次");
return res + '222';
}).then(res => {
console.log(res, "第三次");
})
Promise的all方法
Promise.all([
// new第一个promise
new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
name: 'swk',
age: 18,
address: 'hgs'
});
}, 3000);
}),
// new第二个promise
new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
name: 'zbj',
age: 19,
address: 'glz'
});
}, 1000);
})
]).then(results => {
// 第一个请求
console.log(results[0]);
// 第二个请求
console.log(results[1]);
console.log(results);
})