首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回second promise TypeScript Jquery promise

返回second promise TypeScript Jquery promise
EN

Stack Overflow用户
提问于 2017-07-17 13:23:01
回答 1查看 78关注 0票数 1

在下面的函数中,我试图返回第二次异步调用的promise对象,但是typescript报告函数必须返回值。我不确定我如何才能做到这一点?我如何退还第二个承诺?

代码语言:javascript
复制
 private getSalesUrl<TServiceInput>(serviceCall: (args: TServiceInput) => JQueryPromise<IServiceResponseT>, args): JQueryPromise<any> {
        serviceCall(args).done(result => {  //1st async call
            if (result.serviceOutput) {
                if (result.serviceOutput.key === "URL") {
                    return tipsInterop.executeSalesRequest(result.serviceOutput.value);  //2nd async call
                }
            }
        });
    }
EN

回答 1

Stack Overflow用户

发布于 2017-07-18 03:18:13

  • 基于OP请求和SO注释,我假设OP需要返回第二个请求的承诺
  • 这不应仅限于TypeScript或JavaScript,因为它是ajax调用的基本功能
  • 此示例使用简单的javascript和Jquery ajax requests

代码语言:javascript
复制
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);
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

注意:

  • 我返回包装在promise中的第二个调用的数据(默认情况下,如果您从return "This is the content of second call: id=>"+ data2.id;

返回数据,则会将其包装到@Bergi评论的新promise中)。

  • 这是传递intercept并传递data

  • 的一种方法。传递第二个调用的数据的另一种方法是返回promise2,即使用return promise2代替intercept

下面是您将其与return promise2;互换时的显示方式

代码语言:javascript
复制
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);
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45136468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档