使用promise.all方法可以解决需要两个异步方法返回值时,但两个异步方法返回时间不同,所造成对两个方法返回值使用时一个方法返回了,然后另一个方法值没有返回时,数据处理错误等问题。
promise.all()该方法用于将多个Promise实例,包装成一个新的Promise实例。
var p = Promise.all([p1,p2]);
(1)只有p1、p2的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
注意( promise.all()成功时,在then(result)中result是个数组 )
//获取p1数据
let p1 = new Promise((resolve, reject) => {
resolve([
{
demo: 'p1数据',
},
])
// getFundOpenApplyByMobile().then(
// (res) => {
// //这里是接口方法
// let result = res.data
// resolve(result) //接口返回成功,抛出成功结果
// },
// (error) => {
// reject(error) //接口报错抛出错误信息
// }
// )
})
//获取p2数据
let p2 = new Promise((resolve, reject) => {
setTimeout(()=>{
resolve([
{
key_1: '值1-1',
key_2: '值1-2',
key_3: '值1-3',
key_4: '值1-4',
}])
},4000)
// getFundOpenApplyByMobile().then(
// (res) => {
// //这里是接口方法
// let result = res.data
// resolve(result) //接口返回成功,抛出成功结果
// },
// (error) => {
// reject(error) //接口报错抛出错误信息
// }
// )
})
//两个都通过再同时进行赋值
Promise.all([p1, p2])
.then((result) => {
console.log(result,"-----返回值") //['成功了', 'success']
})
.catch((error) => {
console.log(error)
})