如何使用 $q 来返回一个 http 请求异步的值(使用打字稿)

     2023-03-13     313

关键词:

【中文标题】如何使用 $q 来返回一个 http 请求异步的值(使用打字稿)【英文标题】:How to use $q to return a value of an http request Async (using typescript) 【发布时间】:2014-09-01 20:01:52 【问题描述】:

我一直在尝试设置一个简单的 promise 异步结构来从 http 请求返回 json 返回的对象,但我找不到任何好的示例。我确定我做错了什么,但我无法理解它。

这是我正在尝试的:

getjsonObjAsync(): any 
    var deferred: ng.IDeferred<any> = this.$q.defer();
    $.ajax(
        url: AppSettings.jsonObjUrl,
        type: 'get',
    )
    .then((result) => 
        deferred.resolve(result);
    )
    return deferred.promise;

当我调用这个方法时,它会返回

Object then: function, catch: function, finally: function
catch: function (callback) 
finally: function (callback) 
then: function (callback, errback, progressback) 
__proto__: Object

但我希望它返回我从 http 请求中获得的 json 对象,我可以查看是否在此处添加 console.log(result):

    )
    .then((result) => 
        console.log(result)
        deferred.resolve(result);
    )

似乎我错误地使用了 $q 系统,但我想不出正确的方法来返回 json 对象。

我尝试按照此处的示例进行操作: https://***.com/a/23572025/3757782 但它仍然无法从请求中返回 json 对象

谢谢!

【问题讨论】:

【参考方案1】:

我认为您可能误解了 Promise 的工作原理。它们不会神奇地将异步操作转换为同步操作,因此除非您想阻止,否则不会从您的方法返回 JSON。

您最终随代码返回的对象的 then 属性是一个为 Promise 注册处理程序的函数,它的使用方式与您对 $.ajax 调用的结果完全相同。

【讨论】:

感谢您的回答!这无疑帮助我解决了问题,(并解决了我的真正问题,即缺乏理解),但 basarat 的答案似乎是更直接的答案。【参考方案2】:

由于您要返回promise,即return deferred.promise,因此您需要在另一端使用承诺,即:

getjsonObjAsync().then((result)=>
    console.log(result);
);

PS:比起$.ajax,更喜欢$http(和$http.get)。

【讨论】:

springboot实现http请求的异步长轮询【2】—asynchandlerinterceptor方式

...说到,释放Servlet线程,交由指定的线程池去处理,那么如何去定义指定的线程池?注意:方法返回的是Callable。执行效果如下图所示:SpringMVC-使用AsyncHandlerInterceptor拦截异步处理请求 查看详情

springdeferredresult异步请求

...通知给前端,实现的方式有很多种。经过考虑,最终决定使用长轮训来实现。而Spring的DeferredResult是一个异步请求,正好可以用来实现长轮训。而这个异步是基于Servlet3的异步来实现的,在Spring中DeferredResult结果会另起线程来处理... 查看详情

使用 Q 用异步调用填充数组

】使用Q用异步调用填充数组【英文标题】:FillinganarraywithasynchronouscallsusingQ【发布时间】:2019-04-3006:13:36【问题描述】:我有一个使用Q库异步返回值的函数。而且我必须在循环中调用它来填充所有结果的数组。我一直在研究这... 查看详情

如何使用异步线程调整/分析线程池配置?

】如何使用异步线程调整/分析线程池配置?【英文标题】:Howtotune/analyzethreadpoolconfigurationwithasynchronousthreads?【发布时间】:2017-09-1520:35:07【问题描述】:使用Servlet3.0,我们可以创建异步操作的任务,允许将处理请求的线程返回... 查看详情

异步请求相关知识点xmlhttp.status的值(http状态表)

...新文件的URL 202——接受和处理、但处理未完成 203——返回信息不确定或不完整 204——请求收到,但返回信息为空 205——服务器完成了请求,用户代理必须复位 查看详情

使用内部的方法来实现http请求

...后,主线程会阻塞,需要返回数据后用户才能继续操作,具体使用上,定义好NSURL以及NSURLCollection,并发送请求即可,使用NSData接收后即可使用异步请求:不会阻塞主线程,但是因为是异步的,所以官方的时候方法是在代理里面接受Data,然后... 查看详情

使用 Netty 和 Scala 演员的异步 http 请求

】使用Netty和Scala演员的异步http请求【英文标题】:AsynchronoushttprequestsusingNettyandScalaactors【发布时间】:2012-12-2006:06:31【问题描述】:嘿希望有人能帮我解决这个问题。我正在尝试使用ScalaActors和Netty.io库来获取异步http请求。(... 查看详情

如何使用 Q.js 在循环中执行异步函数

】如何使用Q.js在循环中执行异步函数【英文标题】:HowtoexecuteasynchronousfunctionsinaloopusingQ.js【发布时间】:2013-10-1704:50:46【问题描述】:我需要在循环中执行一个异步函数(使用不同的参数)。任何想法如何使用Node.js中的Q模块... 查看详情

如何在 useReducer 钩子中发出异步服务器请求?

】如何在useReducer钩子中发出异步服务器请求?【英文标题】:HowtomakeaasynchronousseverrequestinauseReducehook?【发布时间】:2021-07-2621:23:04【问题描述】:我已经使用useContext设置了一个useReducer挂钩来接收电子邮件和密码以用于登录目的... 查看详情

angularjs$q$http处理多个异步请求

angularjs$q、$http处理多个异步请求在实际业务中经常需要等待几个请求完成后再进行下一步操作。但angularjs中$http不支持同步的请求。解决方法一:$http.get(‘url1‘).success(function(d1){$http.get(‘url2‘).success(function(d2){//处理逻辑});});... 查看详情

如何将ext.ajax.request请求返回的值赋值给全局变量

Ajax是异步的,所以赋值是成功完成了的,但是大部分情况下是在尝试去使用result全局变量之后才发生赋值操作,因此是没有保证的。所以,针对Ajax请求返回的数据,不能这样使用,建议还是在回调函数中直接操作吧。如果一定... 查看详情

使用 GIO 的异步 HTTP 请求

...时间】:2011-01-0905:44:33【问题描述】:我希望有一个关于如何使用Python的GIO绑定执行异步HTTPPOST请求的示例。编辑:不使用Twisted的示例。【问题讨论】:【参考方案1】:JamesHenstridge\'sblog上提供了一个使用TwistedDeferred对象的示例... 查看详情

(05)使用deferredresult多线程异步处理请求(代码片段)

  通常处理HTTP请求时使用同步处理的方式,但有时根据业务场景和性能要求异步处理可能更合适。简单说下概念。  同步处理:一个HTTP请求进入一个主线程,主线程处理完后给出一个HTTP响应。  异步处理:一个HTTP请求... 查看详情

如何在 Q 中按顺序链接可变数量的 Promise?

】如何在Q中按顺序链接可变数量的Promise?【英文标题】:HowtochainavariablenumberofpromisesinQ,inorder?【发布时间】:2013-07-1910:07:23【问题描述】:我见过ChaininganarbitrarynumberofpromisesinQ;我的问题不同。如何按顺序进行可变数量的调用,... 查看详情

springboot使用webasynctask异步返回结果

...b容器的线程接收的,比如线程http-nio-8084-exec-1。我们可以使用WebAsyncTask将这个请求分发给一 查看详情

使用deferredresult实现异步处理rest服务示例(代码片段)

...同步处理和异步处理的理解二、同步处理的代码示例三、使用DeferredResult实现异步处理的代码示例一、同步处理和异步处理的理解同步处理:一个http请求进来,一个tomcat或者中间件会有一个相应的线程来处理http请求,... 查看详情

使用runnable实现异步处理rest服务示例(代码片段)

...同步处理和异步处理的理解二、同步处理的代码示例三、使用Runnable实现异步处理的代码示例一、同步处理和异步处理的理解同步处理:一个http请求进来,一个tomcat或者中间件会有一个相应的线程来处理http请求,所... 查看详情

javascript如何让jqajax请求success函数里返回的数据,变为外层函数的返回值?

...ata.info的值)return...//return的值等于ajax请求返回的data.info,如何实现这个异步的问题,如何解决?参考技术A这种异步问题,可以通过传入一个回调函数来解决,ajaxsuccess后执行这个回调函数 查看详情