返回第二个承诺TypeScript Jquery承诺

时间:2017-07-17 05:23:01

标签: jquery typescript promise

在下面的函数中,我试图返回第二次异步调用的promise对象,但是typescript抱怨该函数必须返回一个值。我不知道我怎么能做到这一点?我如何归还第二个承诺?

layoutSubviews()

1 个答案:

答案 0 :(得分:0)

  • 根据OP要求的内容和SO评论,我假设OP需要第二个请求的回复
  • 这不应限于TypeScript或JavaScript,因为它是ajax调用的基本功能
  • 此示例使用简单的javascript和Jquery ajax请求



var requests = {
  firstRequest: function() {
    return $.ajax('https://jsonplaceholder.typicode.com/posts/1');
  },
  secondRequest: function() {
    return $.ajax('https://jsonplaceholder.typicode.com/posts/2');
  }
};

var processResults = {
  callService: function() {
    return requests.firstRequest().then((data, textStatus, promise) => {
      return requests.secondRequest().then((data2, textStatus2, promise2) => {
        return "This is the content of second call: id=>" + data2.id;
      });
    });
  }
};

processResults.callService().then((data, textStatus, promise) => {
  console.log(data);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

注意:

  • 我将第二个调用的数据包含在一个promise中(默认情况下,如果你从中调用它返回数据,它将被包装成一个由@Bergi评论的新promise)
  • 这是传递拦截并传递数据的一种方法
  • 传递第二个来电数据的另一种方法是返回promise2,即使用return promise2代替return "This is the content of second call: id=>"+ data2.id;

以下是您与return promise2;

交换时的显示方式

&#13;
&#13;
var requests = {
  firstRequest: function() {
    return $.ajax('https://jsonplaceholder.typicode.com/posts/1');
  },
  secondRequest: function() {
    return $.ajax('https://jsonplaceholder.typicode.com/posts/2');
  }
};

var processResults = {
  callService: function() {
    return requests.firstRequest().then((data, textStatus, promise) => {
      return requests.secondRequest().then((data2, textStatus2, promise2) => {
        return promise2;
      });
    });
  }
};

processResults.callService().then((data, textStatus, promise) => {
  console.log(data);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;