- 19
- 0
问题描述
promise.all(promises);promises是一个请求数组,希望请求完后可以resolve数据,但是并没有成功。
问题出现的环境背景
首页有5个get请求,axios超时拦截显示一个div,点击重新发起请求,但是前台页面接收到只有最后一个请求的response,所以我把请求放在一个数组里了,用promise.all发起,但是无法resolve数据
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
import Axios from 'axios'
import Qs from 'qs'
import Vue from 'vue'
Axios.defaults.timeout = 500
var configArr=[]
const request = (options) => new Promise((resolve, reject) => {
const page404 = (config) => {
var Arr = [config];
if(configArr.length>0){
if(Arr.indexOf(configArr)<0){
configArr.push(config);
}
}else{
configArr.push(config);
}
var configarr=[];
for(var i=0;i<configArr.length;i++){
if(configarr.indexOf(configArr[i])<0){
configarr.push(configArr[i]);
}
}
document.getElementById('loadAgain').style.display='block';
let c = Vue.extend({
template:'<div id="loadAgain" @click="loadAgain"><div class="loadBox"><img src="static/img/woply_404@2x.png"/></div><p class="load-p">网络不给力</p><p class="load-p">点击屏幕,重新加载</p></div>',
methods: {
loadAgain() {
configArr=[];
let promises=[];
let result=[];
for(let i=0;i<configarr.length;i++){
promises.push(new Promise((resolve1, reject1) =>{
return request(configarr[i]).then((res) => {
if (typeof res == 'string') {
res = JSON.parse(res)
}
result.push(res);
resolve1(res);
})
.catch((err) => {
})
resolve1(result)
}))
}
Promise.all(promises).then(resultArray => {
console.log(result);
console.log(resultArray);
resolve(resultArray)
})
result=[];
configarr=[]
document.getElementById('loadAgain').style.display='none';
}
}
})
new c().$mount('#loadAgain');
}
Axios.interceptors.response.use((response) => {
//卸载404组件
document.getElementById('loadAgain').style.display='none';
return response;
}, (error) => {
let config=error.config;
if(error.code=='ECONNABORTED'&& error.message.indexOf('timeout')!=-1){
//超时处理
document.getElementById('loadAgain').style.display='block';
page404(config);
}
if(error.message.indexOf('Network')!=-1){
//网络异常
setTimeout(function(){
page404(config);
},5000)
}
return Promise.reject(error);
});
Axios.request(options)
.then((res) => {
if (typeof res == 'string') {
res = JSON.parse(res)
}
resolve(res)
})
.catch((err) => {
})
})
export default {
get: (URL,options) => new Promise((resolve, reject) => {
return request(Object.assign({}, options, { method: "get" ,url:URL})).then(res => {resolve(res)})
}),
post: (URL,params,options) => new Promise((resolve, reject) => {
return request(Object.assign({}, options, {
method: "post",
url:URL,
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
},
data:params,
paramsSerializer: function(params) {
return Qs.stringify(params, {arrayFormat: 'brackets'})
},
})).then(res => {resolve(res)})
})
}
你期待的结果是什么?实际看到的错误信息又是什么?
resolve后首页的请求可以拿到response,但是并没有到那里
- 共 0 条
- 全部回答
-
浪荡一生钟情一人 普通会员 1楼
在
Promise.all()方法的回调函数中,then()方法用于处理每个任务的完成或失败,resolve()方法用于处理所有任务都成功完成的情况。下面是一个示例,展示如何在Promise.all()方法的回调函数中使用resolve()方法来处理数组data:```javascript const promises = [ Promise.resolve(1), Promise.resolve(2), Promise.resolve(3), Promise.resolve(4), Promise.resolve(5) ];
Promise.all(promises) .then(data => { // 处理所有任务完成的情况 console.log(data); // 输出:[1, 2, 3, 4, 5] // resolve('All tasks completed') // 处理所有任务都成功完成的情况 resolve('All tasks completed'); }) .catch(error => { // 处理任务失败的情况 console.error(error); // 输出:错误:all promises rejected }); ```
在这个示例中,
Promise.all(promises)是一个 Promise 对象,包含多个 Promise 对象。每个 Promise 对象代表一个任务,当所有任务都成功完成时,Promise.all()方法会返回一个包含所有任务结果的 Promise 对象。then()方法接受一个回调函数,该函数在每个任务完成时被调用。在这个回调函数中,我们可以访问并处理数组data中的每个元素。在这个示例中,
resolve('All tasks completed')是一个resolve()方法,它会返回一个新的 Promise 对象,该对象的resolve()方法被调用,当所有任务都成功完成时,该方法会调用Promise.all()方法返回的 Promise 对象的resolve()方法,从而将data字符串设置为 'All tasks completed'。注意,当一个或多个 Promise 失败时,
catch()方法会被调用,该方法会接收一个包含错误信息的error参数。在这个示例中,我们捕获了Promise.all()方法返回的错误,然后将错误信息打印到控制台。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
