javascript - 关于在map中使用fetch异步请求
ringa_lee
ringa_lee 2017-04-11 13:16:35
[JavaScript讨论组]
let city = [
    {
        name:'深圳',
        level:'1',
    },
    {
        name:'上海',
        level:'1',
    },
    {
        name:'重庆',
        level:'1',
    },
]

city.map((item)=>{
    item['isLeaf'] = fetch_get(.....).then( data != '' ? false : true )
})

大概代码思路是这样的

描述:
一个城市级联选择,我要动态的去异步请求一个端口看这个城市下面是否还有子节点。

问题:每次还没等全部数据都异步返回数据的时候,map循环就已经结束了,组件开始渲染,返回快的有数据,返回慢的就没有。

追加描述:
不能一次全部拿回所有数据,因为数据量太大一次拿回全部数据页面假死。

麻烦大家了z~!

ringa_lee
ringa_lee

ringa_lee

全部回复(3)
高洛峰
let city = [{
    name: '深圳',
    level: '1',
  },
  {
    name: '上海',
    level: '1',
  },
  {
    name: '重庆',
    level: '1',
  },
]

city.map(async(item) => {
  item['isLeaf'] = (await fetch('')).data === ''
})
巴扎黑

Promise.all

天蓬老师

我更推荐用Promise.all 支持性更广。

下面是我自己的用过的类似的情景:

var DATA = {};

function getData(me) {
    url = epoint.dealRestfulUrl('themedataaction/' + me);

    return Util.ajax({
        url: url
    }).done(data => {
        DATA[me] = data;
    });
}

var promise = [];
['getUserInfo', 'getQuickMenu', 'getMsgCount', 'getMsgData', 'getThemes'].forEach(method => {
    promise.push(getData(method));
});

Promise.all(promise).then(function(data) {
    console.log(data); // 这里的data是一个数组 分别对应每个请求的返回数据。
    console.log(JSON.stringify(DATA, 0, 4));
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号