javascript - promise.then如何处理连续ajax请求
迷茫
迷茫 2017-04-11 13:25:00
[JavaScript讨论组]
function a(callback) {
  var xhr, results, url;
  url = 'http://example.com/search';

  xhr = new XMLHttpRequest();
  xhr.open('GET', url, true);

  xhr.onload = function (e) {
    if (this.status === 200) {
      results = JSON.parse(this.responseText);
      callback(results);
    }
  }
  xhr.send();
}
  
function b(callback) {
  var xhr, results, url;
  url = 'http://example.com/search';

  xhr = new XMLHttpRequest();
  xhr.open('GET', url, true);

  xhr.onload = function (e) {
    if (this.status === 200) {
      results = JSON.parse(this.responseText);
      callback(results);
    }
  }
  xhr.send();
}

function c(callback) {
  var xhr, results, url;
  url = 'http://example.com/search';
  xhr = new XMLHttpRequest();
  xhr.open('GET', url, true);
  xhr.onload = function (e) {
    if (this.status === 200) {
      results = JSON.parse(this.responseText);
      callback(results);
    }
  }
  xhr.send();
}

a(function(){
    // a成功之后,调用b
    b(function(){
    // b成功之后,调用c
        c()
    })
})

希望大概实现为需要直接在.then()后面接:
test().then(a)
      .then(b)
      .then(c)


迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
PHPz
         var a = function(){
            return $.ajax("a.json").then((result)=>{
                console.info(new Date().getTime())
                console.info(result)
            })
        }
         var b = function(){
            return $.ajax("b.json").then((result)=>{
                 console.info(new Date().getTime())
                console.info(result)
            })
        }
         var c = function(){
            return $.ajax("c.json").then((result)=>{
                 console.info(new Date().getTime())
                console.info(result)
            })
        }

        a().then(b).then(c)
怪我咯

你要做的事情是把callback形式的函数封装成Promise的形式

function a() {
  return new Promise(function(resolve){
    var xhr, results, url;
    url = 'http://example.com/search';

    xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);

    xhr.onload = function (e) {
      if (this.status === 200) {
        results = JSON.parse(this.responseText);
        resolve(results);
      }
    }
    xhr.send();
  });
}
  
function b() {
  return new Promise(function(resolve){
    var xhr, results, url;
    url = 'http://example.com/search';

    xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);

    xhr.onload = function (e) {
      if (this.status === 200) {
        results = JSON.parse(this.responseText);
        resolve(results);
      }
    }
    xhr.send();
  });
}

function c() {
  return new Promise(function(resolve){
    var xhr, results, url;
    url = 'http://example.com/search';
    xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.onload = function (e) {
      if (this.status === 200) {
        results = JSON.parse(this.responseText);
        resolve(results);
      }
    }
    xhr.send();
  });
}

//ES6
a()
  .then(b)
  .then(c);

//ES2017
await a();
await b();
await c();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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