账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Promise并发请求,单个请求完毕后立刻处理请求
    45
    0
    getJSON('xxxx')
    .then(function(response) {
      return Promise.all(response.results.map(getJSON));
    })
    .then(function(series) {
      series.forEach(addDom);
    });

    其中getJSON() 是fetch请求,response.results是url的数组,addDom()是对数据的操作;
    这段代码实现了:1.url并发请求 2.不同请求的数据顺序操作
    但问题是所有请求全部加载完成后再处理数据,如何实现当前顺序的数据加载完成后就立刻对其处理而不等待其他数据


    先感谢下大家的回答!
    我通过其他途径拿到这样一份答案,同样利用队列,@Xeira的方法很清晰,判断任务是否完成很好理解;但下面这种方法promise用的让我有点晕,不太理解
    这里用Xeira的方法改了下:

    (()=>{
        Promise.allInOrder = (promises, thenForEach)=>{
            let sequence = Promise.resolve();
            
            promises.forEach(function(request){
                sequence = sequence.then(function(){
                  return request.then(thenForEach);
              });
            });
    
        };
    })();
    
    // test
    (()=>{
        let timeConsumingFunc = param=>new Promise(
                (resolve)=>{
                    let timeout = Math.random() * 5000;
                    console.log(`task ${param} will be resolved in ${timeout}ms`);
                    setTimeout(()=>{
                        console.log(`${param} resolved`);
                        resolve(param+10);
                    }, timeout);
                }
            );
        Promise
            .allInOrder(
                [timeConsumingFunc(1), timeConsumingFunc(2), timeConsumingFunc(3)],
                d=>{
                    return new Promise(function(resolve) {
                      console.log(d);
                    resolve();
                  });
                }
            )
    })();
    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 有一种范儿叫霸气 普通会员 1楼

      在JavaScript中,我们可以使用Promise和async/await来并发请求并处理请求。以下是一个简单的例子:

      ```javascript // 假设我们有三个Promise对象,分别代表三个不同的请求 let promises = [ fetch('http://example.com/a'), fetch('http://example.com/b'), fetch('http://example.com/c') ];

      // 等待所有请求都完成 Promise.all(promises) .then(responses => { // 处理所有响应 responses.forEach(response => { console.log(response); }); }) .catch(error => { // 处理错误 console.error(error); }); ```

      在这个例子中,我们首先创建了一个Promise数组,然后使用Promise.all()方法等待所有Promise都完成。一旦所有Promise都完成,我们使用then()方法处理每个响应,最后使用catch()方法处理任何错误。

      这种方法的优点是,它可以让我们的代码更加清晰和可读。我们可以在一个地方处理请求的异步操作,而不是分散在多个地方。此外,由于Promise.all()方法返回一个新的Promise,所以我们可以在获取到所有响应后立即处理它们,而不需要等待所有请求都完成。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部